package com.aasa.siccosap.action;

import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.rmi.RemoteException;
import java.sql.Connection;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JRRuntimeException;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.export.JRPdfExporter;
import net.sf.jasperreports.engine.util.JRLoader;

import org.apache.tools.ant.util.DateUtils;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessages;
import java.util.HashMap;
import java.util.Map;
import java.io.File;

import javax.servlet.ServletOutputStream;
import javax.xml.rpc.ServiceException;
import com.aasa.siccosap.bean.*;
import com.aasa.siccosap.dao.ObraDAO;
import com.aasa.siccosap.dao.accesoDaoException;
import com.aasa.siccosap.form.ConsultaForm;
import com.aasa.siccosap.ireport.dsource.*;
import com.aasa.siccosap.ireport.rbean.*;
import com.aasa.siccosap.service.*;
import com.aasa.siccosap.util.FTPUtils;
import com.aasa.siccosap.util.Logging;
import com.aasa.siccosap.util.UtilPersistencia;
import com.caasa.docus.to.xsd.PedidoBeanWs;
import com.caasa.docus.ws.DocumentosLocator;
import com.caasa.docus.ws.DocumentosPortType;

public class ConsultaAction extends GenericaAction {
	
	
	////esta una prueba para el subversion
	static private final int TIMEOUT = 200;

	public ActionForward obtenNombreCliente(ActionMapping mapping,
			ActionForm objA_actionForm, HttpServletRequest request,
			HttpServletResponse response) 
	throws IOException, ServletException {
		
		ClienteService objL_clienteService = new ClienteService();
		String strL_codigoCliente = request.getParameter("codigoCliente");
		String strL_nombreCliente = null;
		String strL_rucCliente = null;
		ClienteBean objL_clienteBean = null;

		objL_clienteBean = objL_clienteService.obtenCliente(strL_codigoCliente);
		strL_nombreCliente = (objL_clienteBean == null) ? 
		"No se encuentra el cliente": objL_clienteBean.getStrPb_nombre();

		if (!strL_codigoCliente.equals("")) {
			strL_rucCliente = (objL_clienteBean == null) ? 
			"" : objL_clienteBean.getStrPb_ruc();
		}

		request.getSession(false).setAttribute("nombreCliente", strL_nombreCliente);
		request.getSession(false).setAttribute("rucCliente", strL_rucCliente);

		response.setContentType("text");
		response.setCharacterEncoding("ISO-8859-1");
		response.getWriter().write(strL_nombreCliente);
		response.getWriter().flush();
		return null;
	}

	public ActionForward obtenEstadoPedido(ActionMapping mapping,
			ActionForm objA_actionForm, HttpServletRequest request,
			HttpServletResponse response) 
	throws IOException, ServletException {

		ClienteService objL_clienteService = new ClienteService();
		String strL_estadoPedido = null;

		try {

			String strL_numPedido = request.getParameter("numPedido");
			PedidoBean objL_pedidoBean = objL_clienteService.obtenerEstadoPedido(strL_numPedido);
			strL_estadoPedido = (objL_pedidoBean == null) ? 
					"No se encuentra el pedido" : objL_pedidoBean.getStrPb_estadoPedido();
			
			request.getSession(false).setAttribute("estadoPedido", strL_estadoPedido);
			response.setContentType("text");
			response.setCharacterEncoding("ISO-8859-1");
			response.getWriter().write(strL_estadoPedido);
			response.getWriter().flush();
			return null;

		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	public ActionForward mostrarPedido(ActionMapping mapping, ActionForm objA_actionForm,
			HttpServletRequest request, HttpServletResponse response)
	throws IOException {

		ConsultaForm objL_consultaForm = (ConsultaForm) objA_actionForm;

		FTPUtils objL_ftp = new FTPUtils();
		ServletOutputStream objL_stream = null;
		BufferedInputStream objL_buf = null;
		boolean blnL_band = true;

		String strL_valor2 = "";
		String strL_secPedido = objL_consultaForm.getStrPb_numeroPedido();

		try {

			DocumentosLocator objL_documentosLocator = new DocumentosLocator();
			DocumentosPortType objL_service = objL_documentosLocator.getDocumentosHttpSoap11Endpoint();

			
			PedidoBeanWs objL_pedidoBeanWs = new DocumentosLocator().getDocumentosHttpSoap12Endpoint().
			getReimpresionPedido("001", "001", strL_secPedido);
			/* aca le pasaras en duro codigos validos para un
			 * caso de prueba prueba sera x el 12 o 11
			 */
			System.out.println(objL_pedidoBeanWs.getStrPv_mensageError());

			if (objL_pedidoBeanWs == null) {
				blnL_band = false;
			} else {
				strL_valor2 = objL_pedidoBeanWs.getStrPv_nombreArchivo();
			}
			
			// has chekeado si genera algo en la carpeta?
			objL_ftp.abrirConexion();

			UtilPersistencia objL_utilPersistencia = new UtilPersistencia();
			String strL_nombreDirectorio = objL_utilPersistencia.getNombreDirectorio(strL_valor2);
			String strL_nombreArchivo = objL_utilPersistencia.getNombreArchivo(strL_valor2);

			InputStream inputDocument = objL_ftp.download(strL_nombreDirectorio,strL_nombreArchivo);

			try {
				if (inputDocument == null) {
					blnL_band = false;
					// System.out.println("El documento no existe en el servidor");
					// redireccionar
				} else {
					// System.out.println("El documento existe en el servidor");

					objL_stream = response.getOutputStream();

					// set response headers
					String strL_contentType = objL_utilPersistencia.getContentTypeFromFileName(strL_valor2);
					response.setContentType(strL_contentType);

					response.addHeader("Content-Disposition","attachment; filename=" + strL_nombreArchivo);

					objL_buf = new BufferedInputStream(inputDocument);

					int intL_readBytes = 0;

					// read from the file; write to the ServletOutputStream

					while (objL_buf != null && (intL_readBytes = objL_buf.read()) != -1) {
						objL_stream.write(intL_readBytes);
					}
				}

			} catch (IOException e2) {
				// TODO Auto-generated catch block
				e2.printStackTrace();
			} finally {

				if (objL_stream != null)
					try {
						objL_stream.close();
					} catch (IOException e) {
						// TODO Auto-generated catch block
						blnL_band = false;
						e.printStackTrace();
					}
				if (objL_buf != null)
					try {
						objL_buf.close();
					} catch (IOException e) {
						// TODO Auto-generated catch block
						blnL_band = false;
						e.printStackTrace();
					}

					objL_ftp.cerrarConexion();
			}

			if (blnL_band) {
				return null;
			} else {
				return mapping.findForward("PedidoHome");
			}

		} catch (Exception e) {
			e.printStackTrace();
		}

		return mapping.findForward("PedidoHome");
	}

	public ActionForward obtenObrasCliente(ActionMapping mapping,
			ActionForm objA_actionForm, HttpServletRequest request,
			HttpServletResponse response) 
	throws IOException, ServletException {

		try {
			AuxiliarService objL_auxiliarService = new AuxiliarService();
			String strL_codigoCliente = request.getParameter("codigoCliente");
			String strL_opciones;

			if (strL_codigoCliente.equals(""))
				strL_opciones = "<option value=\"\">--Debe Seleccionar una Obra--</option>";
			else {
				ParametrosGenerales objL_parametrosGenerales = new ParametrosGenerales();
				objL_parametrosGenerales.setStrPb_codigoCliente(strL_codigoCliente);

				List<ValorCombo> aobjL_listaObras = new ArrayList<ValorCombo>();

				ValorCombo objL_obraVacio = new ValorCombo();
				objL_obraVacio.setStrPb_codigo("");
				objL_obraVacio.setStrPb_valor("--Debe Seleccionar una Obra--");
				aobjL_listaObras.add(objL_obraVacio);

				aobjL_listaObras.addAll(objL_auxiliarService.obtenerValoresObrasCliente(objL_parametrosGenerales));
				// String nombreCliente =
				// clienteService.obtenNombreCliente(codigoCliente);

				// opciones =
				// "<option value=\"Todas\">Todas las obras</option>";
				// /opciones =
				// "<option value=\"\">--Debe Seleccionar Cliente--</option>";
				strL_opciones = "";

				ValorCombo objL_todasObras = new ValorCombo();
				objL_todasObras.setStrPb_codigo("Todas");
				objL_todasObras.setStrPb_valor("Todas las obras");
				aobjL_listaObras.add(objL_todasObras);

				ConsultaForm objL_consultForm = (ConsultaForm) objA_actionForm;
				objL_consultForm.setListaObras(aobjL_listaObras);
				String strL_seleccionada = " ";

				for (ValorCombo obra : aobjL_listaObras) {
					strL_seleccionada = " ";
					/*
					 * if((consultForm.getObraSeleccionada() != null) &&
					 * (obra.getCodigo
					 * ().equals(consultForm.getObraSeleccionada())))
					 * seleccionada = " selected ";
					 */
					strL_opciones += "<option" + strL_seleccionada + "value=\""
					+ obra.getStrPb_codigo() + "\">" + obra.getStrPb_valor()
					+ "</option>";
				}
			}

			response.setContentType("text");
			response.setCharacterEncoding("ISO-8859-1");
			response.getWriter().write(strL_opciones);
			response.getWriter().flush();

			return null;
		} catch (Exception e) {
			// TODO - Que el jsp maneje este error (por ej mostrando un textbox
			// para ingresar el codigo)
			response.setContentType("text");
			response.setCharacterEncoding("ISO-8859-1");
			response.getWriter().write("<option value=\"\">ERROR</option>");
			response.getWriter().flush();
			Logging.log(this.getClass(), e.getMessage(), e);
			return null;
		}
	}
	
	public ActionForward obtenNombreObra(ActionMapping mapping,
			ActionForm objA_actionForm, HttpServletRequest request,
			HttpServletResponse response) 
	throws Exception {
		ObraService objL_obraService = new ObraService();
		String strL_codigoCliente = request.getParameter("codigoCliente");
		String strL_codigoObra = request.getParameter("codigoObra");
		String strL_nombreObra = null;
		ObraBean objL_obraBean = null;

		//System.out.println("cliente: " + codigoCliente);
		//System.out.println("obra: " + codigoObra);
		
		objL_obraBean = objL_obraService.consultaNombreObra(strL_codigoObra, strL_codigoCliente);
		strL_nombreObra = (objL_obraBean == null) ? 
		"No se encuentra la obra": objL_obraBean.getStrPb_descObra();

		if (!strL_codigoObra.equals("")) {
			strL_codigoObra = (objL_obraBean == null) ? 
			"" : objL_obraBean.getStrPb_numObra();
		}

		request.getSession(false).setAttribute("nombreObra", strL_nombreObra);

		response.setContentType("text");
		response.setCharacterEncoding("ISO-8859-1");
		response.getWriter().write(strL_nombreObra);
		response.getWriter().flush();

		return null;
	}
	
	public ActionForward obtenObraYDespachos(ActionMapping mapping,
			ActionForm form, HttpServletRequest request,
			HttpServletResponse response) 
	throws Exception {
		ObraService objL_obraService = new ObraService();
		String strL_codigoCliente = request.getParameter("codigoCliente");
		String strL_codigoObra = request.getParameter("codigoObra");
		String strL_nombreObra = null;
		ObraBean objL_obraBean = null;
		
		
		int intL_dias=0;
		int intL_anio=-1;
		Calendar objL_calendar = Calendar.getInstance();
		//System.out.println(new Date(c1.getTimeInMillis()));
		objL_calendar.add(Calendar.DAY_OF_MONTH,intL_dias)  ;
		objL_calendar.add(Calendar.YEAR,intL_anio);
		String strL_fechaFin = DateUtils.format(Calendar.getInstance().getTime(),"dd/MM/yyyy");
		String strL_fechaInicio = DateUtils.format(new Date(objL_calendar.getTimeInMillis()),"dd/MM/yyyy");
		
		ArrayList<DespachoBean> aobjL_comboDespacho = new ArrayList<DespachoBean>();

		//System.out.println("cliente: " + codigoCliente);
		//System.out.println("obra: " + codigoObra);
		
		objL_obraBean = objL_obraService.consultaNombreObra(strL_codigoObra, strL_codigoCliente);
		strL_nombreObra = (objL_obraBean == null) ? 
		"No se encuentra la obra": objL_obraBean.getStrPb_descObra();

		if (!strL_codigoObra.equals("")) {
			strL_codigoObra = (objL_obraBean == null) ? 
			"" : objL_obraBean.getStrPb_numObra();
		}

		request.getSession(false).setAttribute("nombreObra", strL_nombreObra);

		DespachoService objL_despachos = new DespachoService();
		aobjL_comboDespacho = objL_despachos.cargarComboNroDespacho(strL_codigoCliente,
				strL_fechaInicio, strL_fechaFin, strL_codigoObra);
		//objL_formcert.setAobj_nroDespacho(comboDesp);
		
		request.getSession(false).setAttribute("listaDespacho", aobjL_comboDespacho);
		
		response.setContentType("text");
		response.setCharacterEncoding("ISO-8859-1");
		response.getWriter().write(strL_nombreObra);
		response.getWriter().flush();

		return null;
	}

	public ActionForward verificiarPop(ActionMapping mapping, ActionForm objA_actionForm,
			HttpServletRequest request, HttpServletResponse response)
	throws IOException, ServletException {

		String strL_result = "NO";

		try {
			String strL_tipoUsuario = (String) request.getSession(false).getAttribute("tipoUser");
			String strL_codigo = (String) request.getSession(false).getAttribute("codigoUser");

			if (strL_tipoUsuario.equals("CLIENTE")) {
				ClienteService objL_clienteService = new ClienteService();
				ClienteBean objL_clienteBean = null;
				objL_clienteBean = objL_clienteService.obtenCliente(strL_codigo);

				ClienteBean objL_cliente = objL_clienteService.consultarVencimientos(strL_codigo);

				if ((objL_cliente.getIntPb_numeroGarantias()!= 0)
						|| (objL_cliente.getIntPb_numeroFacturas()!= 0)
						|| (objL_cliente.getIntPb_numeroLetras() != 0) ||(objL_cliente.getIntPb_numeroGarantiasVencidas()!= 0)
						|| (objL_cliente.getIntPb_numeroFacturasVencidas()!= 0)
						|| (objL_cliente.getIntPb_numeroLetrasVencidas() != 0)) {

					strL_result = "SI";
					response.setCharacterEncoding("ISO-8859-1");
					response.getWriter().write(strL_result);
					response.getWriter().flush();

					return null;

				}

			}

		} catch (Exception e) {
			e.printStackTrace();
		}

		response.setCharacterEncoding("ISO-8859-1");
		response.getWriter().write(strL_result);
		response.getWriter().flush();

		return null;

	}

	public ActionForward IniciarPopUp(ActionMapping mapping, ActionForm objA_actionForm,
			HttpServletRequest request, HttpServletResponse response)
	throws IOException, ServletException {

		try {
			String strL_codigo = (String) request.getSession(false).getAttribute("codigoUser");

			ClienteService objL_clienteService = new ClienteService();
			ClienteBean objL_cliBean = objL_clienteService.consultarVencimientos(strL_codigo);

			if (objL_cliBean.getIntPb_numeroFacturas() != 0) {
				request.setAttribute("numeroFacturas", objL_cliBean.getIntPb_numeroFacturas()+ " ");
			}
			if (objL_cliBean.getIntPb_numeroGarantias() != 0) {
				request.setAttribute("numeroGarantias", objL_cliBean.getIntPb_numeroGarantias()+ " ");
			}
			if (objL_cliBean.getIntPb_numeroLetras() != 0) {
				request.setAttribute("numeroLetras", objL_cliBean.getIntPb_numeroLetras()+ " ");
			}
			
			if (objL_cliBean.getIntPb_numeroFacturasVencidas() != 0) {

				request.setAttribute("numeroFacturasVencidas", objL_cliBean.getIntPb_numeroFacturasVencidas()+ " ");
			}
			if (objL_cliBean.getIntPb_numeroGarantiasVencidas() != 0) {
				request.setAttribute("numeroGarantiasVencidas", objL_cliBean.getIntPb_numeroGarantiasVencidas()+ " ");
			}
			if (objL_cliBean.getIntPb_numeroLetrasVencidas() != 0) {
				request.setAttribute("numeroLetrasVencidas",objL_cliBean.getIntPb_numeroLetrasVencidas()+ " ");
			}

		} catch (Exception e) {
			e.printStackTrace();
		}

		return mapping.findForward("InicioPop");

	}

	private ParametrosGenerales extraeParametrosConsulta(ActionForm objA_actionForm,
			ParametrosGenerales objA_parametrosGenerales) 
	throws Exception {
		
		ConsultaForm objL_consultForm = (ConsultaForm) objA_actionForm;

		objA_parametrosGenerales = (objA_parametrosGenerales == null) ? 
		new ParametrosGenerales(): objA_parametrosGenerales;
		
		objA_parametrosGenerales.setStrPb_codigoCliente(objL_consultForm.getStrPb_codigoCliente());
		DateFormat objL_dateFormat = new SimpleDateFormat("dd/MM/yyyy");

		String strL_fechaInicioLiteral = objL_consultForm.getStrPb_fechaInicio();
		String strL_fechaFinLiteral = objL_consultForm.getStrPb_fechaFin();
		
		Date datL_fechaInicio = ((strL_fechaInicioLiteral == null) || strL_fechaInicioLiteral.equals("")) ? 
		null : objL_dateFormat.parse(strL_fechaInicioLiteral);
		
		Date datL_fechaFin = ((strL_fechaFinLiteral == null) || strL_fechaFinLiteral.equals("")) ? 
		null : objL_dateFormat.parse(strL_fechaFinLiteral);
		
		objA_parametrosGenerales.setObjPb_fechaInicio(datL_fechaInicio);
		objA_parametrosGenerales.setObjPb_fechaFin(datL_fechaFin);

		return objA_parametrosGenerales;
	}

	public ActionForward consultaGarantiasHome(ActionMapping mapping,
			ActionForm objA_actionForm, HttpServletRequest request,
			HttpServletResponse response) 
	throws IOException, ServletException {
		try {
			ConsultaForm objL_consultForm = (ConsultaForm) objA_actionForm;

			objL_consultForm.setStrPb_codigoCliente("");
			objL_consultForm.setStrPb_nombreCliente("");
			objL_consultForm.setStrPb_tipoGarantia("GB");
			objL_consultForm.setStrPb_fechaInicio(null);
			objL_consultForm.setStrPb_fechaFin(null);

			cargaCodigoClienteEnFormulario(request, objL_consultForm);

			request.getSession(false).setAttribute("listaGarantiasPorLinea",null);
			request.getSession(false).setAttribute("listaDetalleSaldosFavor",null);
			request.getSession(false).setAttribute("listaDetalleSaldosNotasCredito", null);
			request.getSession(false).setAttribute("totalesGarantia", null);

			request.getSession(false).setAttribute("listaGarantiasBancarias",null);

			request.getSession(false).setAttribute("listaGarantias", 0);

			//SETEO CODIGO DE CLIENTE
			String strL_tipoUsuario = (String) request.getSession(false).getAttribute("tipoUser");
			String strL_codigo = (String) request.getSession(false).getAttribute("codigoUser");
			
			if (strL_tipoUsuario.equals("CLIENTE")) {
				ClienteService objL_clienteService = new ClienteService();
				ClienteBean objL_clienteBean = null;
				objL_clienteBean = objL_clienteService.obtenCliente(strL_codigo);
				
				String strL_nombreCliente = (objL_clienteBean == null) ? "No se encuentra el cliente": objL_clienteBean.getStrPb_nombre();
				objL_consultForm.setStrPb_codigoCliente(strL_codigo);
				objL_consultForm.setStrPb_nombreCliente(strL_nombreCliente);
			}

			return mapping.findForward("ConsultaGarantias");
		} catch (Exception e) {
			// System.out.println("ConsultaAction-consultaGarantiasHome: "+e.getMessage());
			e.printStackTrace();
			request.setAttribute("detalleError","ConsultaAction-consultaGarantiasHome: " + e.getMessage());
			Logging.log(this.getClass(), e.getMessage(), e);
			return mapping.findForward("error");
		}

	}

	public ActionForward consultaGarantiasProcess(ActionMapping mapping,
			ActionForm objA_actionForm, HttpServletRequest request,
			HttpServletResponse response) 
	throws IOException, ServletException {
		try {

			ParametrosGarantia objL_parametros = extraeParametrosGarantias(objA_actionForm,null);

			GarantiaPorLineaService objL_garantiaPorLineaService = new GarantiaPorLineaService();
			
			List<GarantiaPorLinea> aobjL_listaGarantiasPorLinea = objL_garantiaPorLineaService.consultarGarantiasPorLinea(objL_parametros);

			SaldoService objL_saldoService = new SaldoService();
			List<SaldoBean> aobjL_listaDetalleSaldosFavor = objL_saldoService.consultarDetalleSaldosFavor(objL_parametros);
			
			List<SaldoBean> aobjL_listaDetalleSaldosNotasCredito = objL_saldoService.consultarDetalleSaldosNotasCredito(objL_parametros);
						
		
			TotalesGarantiaService objL_totalesGarantiaService = new TotalesGarantiaService();
			TotalesGarantia totales = objL_totalesGarantiaService.consultarTotalesGarantias(objL_parametros);

			GarantiaBancariaService objL_garantiaBancariaService = new GarantiaBancariaService();
			List<GarantiaBancaria> aobjL_listaGarantiasBancarias = objL_garantiaBancariaService.consultarGarantiasBancarias(objL_parametros);
			
			List<GarantiaBancaria> aobjL_listaGarantiasRenovadas=objL_garantiaBancariaService.consultarGarantiaBancariasRenovadas(objL_parametros);

			request.getSession(false).setAttribute("listaGarantiasPorLinea",aobjL_listaGarantiasPorLinea);
			request.getSession(false).setAttribute("listaDetalleSaldosFavor",aobjL_listaDetalleSaldosFavor);
			request.getSession(false).setAttribute("listaGarantiasRenovadas", aobjL_listaGarantiasRenovadas);
			request.getSession(false).setAttribute("listaDetalleSaldosNotasCredito",aobjL_listaDetalleSaldosNotasCredito);
			request.getSession(false).setAttribute("totalesGarantia", totales);
			request.getSession(false).setAttribute("listaGarantiasBancarias",aobjL_listaGarantiasBancarias);

			while (aobjL_listaGarantiasPorLinea.size() < 9) {
				GarantiaPorLinea objL_temp = new GarantiaPorLinea();
				objL_temp.setStrPb_codigoLinea("&nbsp;");
				aobjL_listaGarantiasPorLinea.add(objL_temp);
			}

			while (aobjL_listaGarantiasBancarias.size() < 9) {
				GarantiaBancaria objL_temp = new GarantiaBancaria();
				objL_temp.setStrPb_tipoGarantia("&nbsp;");
				aobjL_listaGarantiasBancarias.add(objL_temp);
			}

			while (aobjL_listaDetalleSaldosFavor.size() < 4) {
				SaldoBean objL_temp = new SaldoBean();
				objL_temp.setStrPb_serie("&nbsp;");
				aobjL_listaDetalleSaldosFavor.add(objL_temp);
			}
			
			if(aobjL_listaGarantiasRenovadas!=null){
			
			while(aobjL_listaGarantiasRenovadas.size()<4){
				GarantiaBancaria objL_temp = new GarantiaBancaria();
				objL_temp.setStrPb_tipoGarantia("&nbsp;");
				aobjL_listaGarantiasRenovadas.add(objL_temp);
			}
			}

			while (aobjL_listaDetalleSaldosNotasCredito.size() < 4) {
				SaldoBean objL_temp = new SaldoBean();
				objL_temp.setStrPb_serie("&nbsp;");
				aobjL_listaDetalleSaldosNotasCredito.add(objL_temp);
			}

			if (objL_parametros.getStrPb_tipoGarantia().equals("GL")) {
				request.getSession(false).setAttribute("listaGarantias", 1); 
				//GARANTIA POR LINEA
			} else if (objL_parametros.getStrPb_tipoGarantia().equals("GB")) {
				request.getSession(false).setAttribute("listaGarantias", 2); 
				//GARANTIA BANCARIA
			} else {
				request.getSession(false).setAttribute("listaGarantias", 0); 
				//NO MUESTRA TABLA
			}

			// cargamos el nombre del cliente despues de la busqueda
			ConsultaForm objL_consultForm = (ConsultaForm) objA_actionForm;
			ClienteService objL_clienteService = new ClienteService();
			ClienteBean objL_cliente = null;
			objL_cliente = objL_clienteService.obtenCliente(objL_consultForm.getStrPb_codigoCliente());
			
			String strL_nombreCliente = (objL_cliente == null) ? "No se encuentra el cliente": objL_cliente.getStrPb_nombre();
			objL_consultForm.setStrPb_nombreCliente(strL_nombreCliente);

			return mapping.findForward("ConsultaGarantias");
		} catch (Exception e) {
			
			e.printStackTrace();
			request.setAttribute("detalleError","ConsultaAction-consultaGarantiasProcess: " + e.getMessage());
			Logging.log(this.getClass(), e.getMessage(), e);
			return mapping.findForward("error");
		}

	}

	private ParametrosGarantia extraeParametrosGarantias(ActionForm objA_actionForm,
			Object object) throws Exception {

		ConsultaForm objL_consultForm = (ConsultaForm) objA_actionForm;
		ParametrosGarantia objL_parametros = new ParametrosGarantia();
		extraeParametrosConsulta(objA_actionForm, objL_parametros);
		objL_parametros.setStrPb_tipoGarantia(objL_consultForm.getStrPb_tipoGarantia());

		return objL_parametros;
	}

	public ActionForward consultaCuentasObraHome(ActionMapping mapping,
			ActionForm form, HttpServletRequest request,
			HttpServletResponse response) 
	throws IOException, ServletException {
		try {

			ConsultaForm objL_consultForm = (ConsultaForm) form;

			objL_consultForm.setStrPb_codigoCliente("");
			objL_consultForm.setStrPb_nombreCliente("");
			objL_consultForm.setStrPb_estadoElementosCuenta("AC");
			objL_consultForm.setStrPb_numeroObra("");
			objL_consultForm.setStrPb_obraSeleccionada("");
			objL_consultForm.setStrPb_fechaInicio("");
			objL_consultForm.setStrPb_fechaFin("");
			objL_consultForm.setStrPb_nroObra("");

			objL_consultForm.setListaObras(new ArrayList<ValorCombo>());

			cargaCodigoClienteEnFormulario(request, objL_consultForm);

			request.getSession(false).setAttribute("listaFacturasFinancieras",null);
			request.getSession(false).setAttribute("listaFacturados", null);
			request.getSession(false).setAttribute("listaFabricacion", null);
			request.getSession(false).setAttribute("listaDiseno", null);
			request.getSession(false).setAttribute("listaNotaCreditoObra", null);
			request.getSession(false).setAttribute("listaOtrasFacturas", null);
			request.getSession(false).setAttribute("listaOtrasNotasDebito",	null);
			request.getSession(false).setAttribute("listaOtrasNotasCredito",null);
			request.getSession(false).setAttribute("listaDepositosObras", null);
			request.getSession(false).setAttribute("listaSaldosPendientesObras", null);

			request.getSession(false).setAttribute("numeroObra", "");
			request.setAttribute("numeroObra", "");
			request.getSession(false).setAttribute("estadoCuentas", "AC");

			//SETEO CODIGO DE CLIENTE
			String strL_tipoUsuario = (String) request.getSession(false).getAttribute("tipoUser");
			String strL_codigo = (String) request.getSession(false).getAttribute("codigoUser");
			
			if (strL_tipoUsuario.equals("CLIENTE")) {
				ClienteService objL_clienteService = new ClienteService();
				ClienteBean objL_clienteBean = null;
				
				objL_clienteBean = objL_clienteService.obtenCliente(strL_codigo);
				String strL_nombreCliente = (objL_clienteBean == null) ? 
				"No se encuentra el cliente": objL_clienteBean.getStrPb_nombre();
				objL_consultForm.setStrPb_codigoCliente(strL_codigo);
				objL_consultForm.setStrPb_nombreCliente(strL_nombreCliente);
			}

			return mapping.findForward("ConsultaCuentasObra");
		} catch (Exception e) {
			e.printStackTrace();
			request.setAttribute("detalleError","ConsultaAction-consultaCuentasObraHome: "+ e.getMessage());
			
			Logging.log(this.getClass(), e.getMessage(), e);
			return mapping.findForward("error");
		}
	}

	public ActionForward consultaCuentasObraProcess(ActionMapping mapping,
			ActionForm objA_actionForm, HttpServletRequest request,
			HttpServletResponse response) throws IOException, ServletException {
		try {

			ConsultaForm objL_consultForm = (ConsultaForm) objA_actionForm;

			request.getSession(false).setAttribute("listaDocumentosClientes",null);
			request.getSession(false).setAttribute("listaNotasCredito", null);
			request.getSession(false).setAttribute("listaSaldosFavor", null);
			request.getSession(false).setAttribute("listaSaldosPendientes",	null);
			request.getSession(false).setAttribute("listaCuentasSaplicacionC",null);

			Boolean blnL_obraTodas = false;

			ParametrosConsultaObra objL_parametros = extraeParametrosConsultaObra(objA_actionForm, null);
			
			List<ObraFacturaFinanciera> aobjL_facturasFinancieras = solicitaRespuestaFacturasFinancieras(objL_parametros);
			List<ObraFacturado> aobjL_facturados = solicitaRespuestaFacturados(objL_parametros);
			List<ObraEnFabricacion> aobjL_fabricacion = solicitaRespuestaEnFabricacion(objL_parametros);
			List<ObraEnDiseno> aObjL_disenio = solicitaRespuestaEnDiseno(objL_parametros);
			List<ObraNotaCredito> aobjL_notaCreditoObra = solicitaRespuestaNotaCreditoObra(objL_parametros, blnL_obraTodas);
			List<DocumentoCliente> aobjL_otrasFacturas = solicitaRespuestaOtrasFacturas(objL_parametros);
			List<DocumentoCliente> aobjL_otrasNotasDebito = solicitaRespuestaOtrasNotasDebito(objL_parametros);
			List<ObraNotaCredito> aobjL_otrasNotasCredito = solicitaRespuestaOtrasNotasCredito(objL_parametros);
			List<DepositoBancario> aobjL_depositosObras = solicitaRespuestaDepositosObras(objL_parametros);
			List<SaldoBean> aobjL_saldosPendientesObras = solicitaRespuestaSaldosPendientesObras(objL_parametros);

			request.getSession(false).setAttribute("listaFacturasFinancieras",aobjL_facturasFinancieras);
			request.getSession(false).setAttribute("listaFacturados",aobjL_facturados);
			request.getSession(false).setAttribute("listaFabricacion",aobjL_fabricacion);
			request.getSession(false).setAttribute("listaDiseno", aObjL_disenio);
			request.getSession(false).setAttribute("listaNotaCreditoObra",aobjL_notaCreditoObra);
			request.getSession(false).setAttribute("listaOtrasFacturas",aobjL_otrasFacturas);
			request.getSession(false).setAttribute("listaOtrasNotasDebito",aobjL_otrasNotasDebito);
			request.getSession(false).setAttribute("listaOtrasNotasCredito",aobjL_otrasNotasCredito);
			request.getSession(false).setAttribute("listaDepositosObras",aobjL_depositosObras);
			request.getSession(false).setAttribute("listaSaldosPendientesObras", aobjL_saldosPendientesObras);
			request.getSession(false).setAttribute("numeroObra",objL_parametros.getStrPb_numeroObra());
			request.setAttribute("numeroObra", objL_parametros.getStrPb_numeroObra());
			request.getSession(false).setAttribute("estadoCuentas",	objL_parametros.getStrPb_estado());

			// cargamos el combo de obras para el cliente
			AuxiliarService objL_auxiliarService = new AuxiliarService();
			ParametrosGenerales objL_parametrosGen = new ParametrosGenerales();
			objL_parametrosGen.setStrPb_codigoCliente(objL_parametros.getStrPb_codigoCliente());
			List<ValorCombo> aobjL_listaObrasCmb = new ArrayList<ValorCombo>();
			
			aobjL_listaObrasCmb.addAll(objL_auxiliarService.obtenerValoresObrasCliente(objL_parametrosGen));
			request.getSession(false).setAttribute("obras", aobjL_listaObrasCmb);

			if (objL_parametros.getStrPb_numeroObra().equalsIgnoreCase("TODAS")) {
				blnL_obraTodas = true;

				// Carga del ReportBean para la creacion del reporte de TODAS
				// las obras de un cliente:
				List<ObraBean> aobjL_listaReporte = new ArrayList<ObraBean>();
				ObraService objL_ObraService = new ObraService();
				aobjL_listaReporte = objL_ObraService.consultarListadoObras(objL_parametros);

				RBCuentaObra.reset();
				DSCuentaObra.newLstRBCuentaObra();
				String strL_codigo = objL_parametros.getStrPb_codigoCliente();
				ClienteBean objL_clienteBean = new ClienteBean();
				ClienteService objClienteService = new ClienteService();
				objL_clienteBean = objClienteService.obtenCliente(strL_codigo);
				/*
				 * objCliente.setCodigo(codigo); objCliente.setNombre((String)
				 * request.getSession().getAttribute("nombreCliente"));
				 * objCliente.setRuc((String)
				 * request.getSession().getAttribute("rucCliente"));
				 */

				// Agregamos una sola vez las listas de todas las obras (el
				// numero de obra en los parametros debe ser TODAS para que el
				// service traiga la data)
				RBCuentaObra objL_RBCuentaTodasObras = new RBCuentaObra();
				aobjL_otrasFacturas = solicitaRespuestaOtrasFacturas(objL_parametros);
				aobjL_otrasNotasDebito = solicitaRespuestaOtrasNotasDebito(objL_parametros);
				aobjL_otrasNotasCredito = solicitaRespuestaOtrasNotasCredito(objL_parametros);
				aobjL_depositosObras = solicitaRespuestaDepositosObras(objL_parametros);
				aobjL_saldosPendientesObras = solicitaRespuestaSaldosPendientesObras(objL_parametros);
				objL_RBCuentaTodasObras.setLstOtrasFacturas(aobjL_otrasFacturas);
				objL_RBCuentaTodasObras.setLstOtrasNotasDebito(aobjL_otrasNotasDebito);
				objL_RBCuentaTodasObras.setLstOtrasNotasCredito(aobjL_otrasNotasCredito);
				objL_RBCuentaTodasObras.setLstDepositosObras(aobjL_depositosObras);
				objL_RBCuentaTodasObras.setLstSaldosPendientesObras(aobjL_saldosPendientesObras);
				objL_RBCuentaTodasObras.setFechaFin(objL_parametros.getObjPb_fechaFin());
				objL_RBCuentaTodasObras.setFechaInicio(objL_parametros.getObjPb_fechaInicio());
				objL_RBCuentaTodasObras.setObjCliente(objL_clienteBean);

				Double dblL_totalSaldoFinalCliente = 0.0;
				Double dblL_resumenSaldoFinalCliente = 0.0;
				Double dblL_resumenImporteFinalCliente = 0.0;

				for (ObraBean o : aobjL_listaReporte) {
					objL_parametros.setStrPb_numeroObra(o.getStrPb_numObra());
					aobjL_facturasFinancieras = solicitaRespuestaFacturasFinancieras(objL_parametros);
					aobjL_facturados = solicitaRespuestaFacturados(objL_parametros);
					aobjL_fabricacion = solicitaRespuestaEnFabricacion(objL_parametros);
					aObjL_disenio = solicitaRespuestaEnDiseno(objL_parametros);
					aobjL_notaCreditoObra = solicitaRespuestaNotaCreditoObra(objL_parametros, blnL_obraTodas);
					aobjL_otrasFacturas = null; // solicitaRespuestaOtrasFacturas(parametros);
					aobjL_otrasNotasDebito = null; // solicitaRespuestaOtrasNotasDebito(parametros);
					aobjL_otrasNotasCredito = null; // solicitaRespuestaOtrasNotasCredito(parametros);
					aobjL_depositosObras = null; // solicitaRespuestaDepositosObras(parametros);
					aobjL_saldosPendientesObras = null; // solicitaRespuestaSaldosPendientesObras(parametros);

					// Carga del ReportBean para la creacion del reporte de una
					// obra especifica:
					RBCuentaObra objRBCuentaObra = new RBCuentaObra();
					objRBCuentaObra.setLstFacturasFinancieras(aobjL_facturasFinancieras);
					objRBCuentaObra.setLstFacturados(aobjL_facturados);
					objRBCuentaObra.setLstFabricacion(aobjL_fabricacion);
					objRBCuentaObra.setLstDiseno(aObjL_disenio);
					objRBCuentaObra.setLstNotaCreditoObra(aobjL_notaCreditoObra);
					objRBCuentaObra.setLstOtrasFacturas(aobjL_otrasFacturas);
					objRBCuentaObra.setLstOtrasNotasDebito(aobjL_otrasNotasDebito);
					objRBCuentaObra.setLstOtrasNotasCredito(aobjL_otrasNotasCredito);
					objRBCuentaObra.setLstDepositosObras(aobjL_depositosObras);
					objRBCuentaObra.setLstSaldosPendientesObras(aobjL_saldosPendientesObras);
					objRBCuentaObra.setStrDescObra(o.getStrPb_descObra());
					objRBCuentaObra.setStrEstado(objL_parametros.getStrPb_estado());
					objRBCuentaObra.setStrNumeroObra(objL_parametros.getStrPb_numeroObra());
					objRBCuentaObra.setFechaFin(objL_parametros.getObjPb_fechaFin());
					objRBCuentaObra.setFechaInicio(objL_parametros.getObjPb_fechaInicio());

					objRBCuentaObra.setObjCliente(objL_clienteBean);

					dblL_totalSaldoFinalCliente += objRBCuentaObra.getSaldoFacturados();
					dblL_totalSaldoFinalCliente += objRBCuentaObra.getSaldoFabricacion();
					dblL_totalSaldoFinalCliente -= objRBCuentaObra.getSaldoNotaCreditoObra();

					dblL_resumenSaldoFinalCliente += objRBCuentaObra.getSaldoFacturados();
					dblL_resumenSaldoFinalCliente += objRBCuentaObra.getSaldoFabricacion();
					dblL_resumenSaldoFinalCliente += objRBCuentaObra.getImporteDiseno();
					dblL_resumenSaldoFinalCliente -= objRBCuentaObra.getSaldoNotaCreditoObra();

					dblL_resumenImporteFinalCliente += objRBCuentaObra.getImporteFacturados();
					dblL_resumenImporteFinalCliente += objRBCuentaObra.getImporteFabricacion();
					dblL_resumenImporteFinalCliente += objRBCuentaObra.getImporteDiseno();
					dblL_resumenImporteFinalCliente -= objRBCuentaObra.getImporteNotaCreditoObra();

					DSCuentaObra.addLstRBCuentaObra(objRBCuentaObra);
				}

				dblL_totalSaldoFinalCliente += objL_RBCuentaTodasObras.getSaldoOtrasFacturas();
				dblL_totalSaldoFinalCliente += objL_RBCuentaTodasObras.getSaldoOtrasNotasDebito();
				dblL_totalSaldoFinalCliente -= objL_RBCuentaTodasObras.getSaldoDepositosObras();
				dblL_totalSaldoFinalCliente -= objL_RBCuentaTodasObras.getSaldoOtrasNotasCredito();
				objL_RBCuentaTodasObras.setTotalSaldoFinalCliente(dblL_totalSaldoFinalCliente);

				dblL_resumenSaldoFinalCliente += objL_RBCuentaTodasObras.getSaldoOtrasFacturas();
				dblL_resumenSaldoFinalCliente += objL_RBCuentaTodasObras.getSaldoOtrasNotasDebito();
				dblL_resumenSaldoFinalCliente -= objL_RBCuentaTodasObras.getSaldoDepositosObras();
				dblL_resumenSaldoFinalCliente -= objL_RBCuentaTodasObras.getSaldoOtrasNotasCredito();
				objL_RBCuentaTodasObras.setResumenSaldoFinalCliente(dblL_resumenSaldoFinalCliente);

				dblL_resumenImporteFinalCliente += objL_RBCuentaTodasObras.getImporteOtrasFacturas();
				dblL_resumenImporteFinalCliente += objL_RBCuentaTodasObras.getImporteOtrasNotasDebito();
				dblL_resumenImporteFinalCliente -= objL_RBCuentaTodasObras.getImporteDepositosObras();
				dblL_resumenImporteFinalCliente -= objL_RBCuentaTodasObras.getImporteOtrasNotasCredito();
				objL_RBCuentaTodasObras.setResumenImporteFinalCliente(dblL_resumenImporteFinalCliente);

				DSCuentaObra.addLstRBCuentaObra(objL_RBCuentaTodasObras);

			} else {
				// Carga del ReportBean para la creacion del reporte de una obra
				// especifica:
				RBCuentaObra.reset();
				RBCuentaObra.setStaLstFacturasFinancieras(aobjL_facturasFinancieras);
				RBCuentaObra.setStaLstFacturados(aobjL_facturados);
				RBCuentaObra.setStaLstFabricacion(aobjL_fabricacion);
				RBCuentaObra.setStaLstDiseno(aObjL_disenio);
				RBCuentaObra.setStaLstNotaCreditoObra(aobjL_notaCreditoObra);
				RBCuentaObra.setStaLstOtrasFacturas(aobjL_otrasFacturas);
				RBCuentaObra.setStaLstOtrasNotasDebito(aobjL_otrasNotasDebito);
				RBCuentaObra.setStaLstOtrasNotasCredito(aobjL_otrasNotasCredito);
				RBCuentaObra.setStaLstDepositosObras(aobjL_depositosObras);
				RBCuentaObra.setStaLstSaldosPendientesObras(aobjL_saldosPendientesObras);

				// seteamos el nombre de la obra
				String strL_nombreObraSeleccionada = null;
				for (ValorCombo valorCombo : aobjL_listaObrasCmb) {
					if (valorCombo.getStrPb_codigo().equals(objL_consultForm.getStrPb_obraSeleccionada())) {
						strL_nombreObraSeleccionada = valorCombo.getStrPb_valor().substring(11);
						break;
					}
				}
				RBCuentaObra.setStaStrDescObra(strL_nombreObraSeleccionada);
				// 
				RBCuentaObra.setStaStrEstado(objL_parametros.getStrPb_estado());
				RBCuentaObra.setStaStrNumeroObra(objL_parametros.getStrPb_numeroObra());
				RBCuentaObra.setStaFechaFin(objL_parametros.getObjPb_fechaFin());
				RBCuentaObra.setStaFechaInicio(objL_parametros.getObjPb_fechaInicio());

				ClienteBean objL_clienteBean = new ClienteBean();
				ClienteService objL_clienteService = new ClienteService();
				objL_clienteBean = objL_clienteService.obtenCliente(objL_parametros.getStrPb_codigoCliente());
				/*
				 * objCliente.setCodigo(parametros.getStrPb_codigoCliente());
				 * objCliente.setNombre((String)
				 * request.getSession().getAttribute("nombreCliente"));
				 * objCliente.setRuc((String)
				 * request.getSession().getAttribute("rucCliente"));
				 */

				RBCuentaObra.setStaObjCliente(objL_clienteBean);
			}

			// cargamos el nombre del cliente despues de la busqueda
			ClienteService objL_clienteService = new ClienteService();
			ClienteBean objL_clienteBean = null;
			objL_clienteBean = objL_clienteService.obtenCliente(objL_parametros.getStrPb_codigoCliente());
			String nombreCliente = (objL_clienteBean == null) ? "No se encuentra el cliente": objL_clienteBean.getStrPb_nombre();
			objL_consultForm.setStrPb_nombreCliente(nombreCliente);

			if (request.getParameter("flgExportar") != null) {
				return mapping.findForward("ConsultaCuentasObraExportar");
			} else {
				return mapping.findForward("ConsultaCuentasObra");
			}

		} catch (Exception e) {
			e.printStackTrace();
			request.setAttribute("detalleError","ConsultaAction-consultaCuentasObraProcess: "+ e.getMessage());
			// System.out.println("ConsultaAction-consultaCuentasObraProcess: "+e.getMessage());
			Logging.log(this.getClass(), e.getMessage(), e);
			return mapping.findForward("error");
		}
	}
	
	public ActionForward exportarCtaCteObraReloaded(ActionMapping mapping,
			ActionForm objA_actionForm, HttpServletRequest request,
			HttpServletResponse response) 
	throws Exception{
		
		ConsultaForm objL_consultaForm= (ConsultaForm)objA_actionForm;
		
		ParametrosConsultaObra objL_parametrosConsultaObra = extraeParametrosConsultaObra(objA_actionForm, null);
		
		if(objL_parametrosConsultaObra.getStrPb_numeroObra().equalsIgnoreCase("TODAS")){
			return this.consultaCuentasObraProcess(mapping, objL_consultaForm, request, response);
		}
		
		else{
			
			String strL_nombreArchivo="";
			String strL_factFinanciera="";
			String strL_facturado="";
			String strL_fabricacion="";
			String strL_disenio="";
			String strL_notaCredito="";
			
			String strL_imagen="";
			
			strL_nombreArchivo=getServlet().getServletContext().getRealPath("/jreport/ReporteCuentaObraRe.jasper");	
			
			strL_factFinanciera=getServlet().getServletContext().getRealPath("/jreport/ReporteCuentaObraSubFactFinancieraRe.jasper");
			strL_facturado=getServlet().getServletContext().getRealPath("/jreport/ReporteCuentaObraSubFacturadoRe.jasper");
			strL_fabricacion=getServlet().getServletContext().getRealPath("/jreport/ReporteCuentaObraSubFabricacionRe.jasper");
			strL_disenio=getServlet().getServletContext().getRealPath("/jreport/ReporteCuentaObraSubDisenoRe.jasper");
			strL_notaCredito=getServlet().getServletContext().getRealPath("/jreport/ReporteCuentaObraSubNotaCreditoRe.jasper");
			
			strL_imagen=getServlet().getServletContext().getRealPath("/images/top_reporte.gif");
			
			Connection objL_conexion = null;
			
			try {
				ObraDAO objL_obraDao= new ObraDAO();
				objL_conexion =objL_obraDao.getConexion();
				Map<String, String> objL_parametros = new HashMap<String, String>();
				
				
				ClienteService objL_clienteService = new ClienteService();
				ClienteBean objL_cliente = objL_clienteService.obtenCliente(objL_consultaForm.getStrPb_codigoCliente());
				
				ObraService objL_obraService = new ObraService();
				ObraBean o= objL_obraService.consultaNombreObra(objL_consultaForm.getStrPb_obraSeleccionada(), objL_consultaForm.getStrPb_codigoCliente());
				
				objL_parametros.put("P_COD_CLI",objL_consultaForm.getStrPb_codigoCliente());
				objL_parametros.put("P_FEC_INI", objL_consultaForm.getStrPb_fechaInicio());
				objL_parametros.put("P_FEC_FIN", objL_consultaForm.getStrPb_fechaFin());
				objL_parametros.put("ESTADO", objL_consultaForm.getStrPb_estadoElementosCuenta());
				objL_parametros.put("P_NUM_OBRA", objL_consultaForm.getStrPb_nroObra());
				objL_parametros.put("P_CLIENTE", objL_cliente.getStrPb_nombre());
				objL_parametros.put("P_OBRA", o.getStrPb_descObra());
				objL_parametros.put("IMAGE_DIR", strL_imagen);
				
				objL_parametros.put("P_FACTFINANCIERA", strL_factFinanciera);
				objL_parametros.put("P_FACTURADO", strL_facturado);
				objL_parametros.put("P_FABRICACION", strL_fabricacion);
				objL_parametros.put("P_DISENO", strL_disenio);
				objL_parametros.put("P_NOTACREDITO", strL_notaCredito);
				
				JasperPrint objL_jasperPrint;
				objL_jasperPrint = JasperFillManager.fillReport(strL_nombreArchivo, objL_parametros, objL_conexion);
					
					response.setContentType("application/x-file-download");//application/x-file-download");
					response.setHeader("Content-disposition","attachment;filename="+"Reporte_CuentaObra.pdf");//myFile.getFileName());
					response.setHeader("Cache-Control","max-age=" + TIMEOUT);
					ServletOutputStream archivoTemp =response.getOutputStream();
					JasperExportManager.exportReportToPdfStream(objL_jasperPrint, archivoTemp);
				
					archivoTemp.flush();
					archivoTemp.close();
				
				
				return null;
				
				
				
				
			} catch (accesoDaoException e) {
				e.printStackTrace();
				request.setAttribute("detalleError","ConsultaAction-consultaCuentasObraProcess: "
				+ e.getMessage());
				
				Logging.log(this.getClass(), e.getMessage(), e);
				return mapping.findForward("error");
			}
			
			finally{
		    	objL_conexion.close();
			}
			 
			
			
		}
		
	}
	
	
	public ActionForward exportarCuentasObraProcess(ActionMapping mapping,
			ActionForm form, HttpServletRequest request,
			HttpServletResponse response) 
	throws IOException, ServletException {

		String strL_numeroObra = (String) request.getSession(false).getAttribute("numeroObra");
		try {
			String strL_rutaJasper = "";

			if (strL_numeroObra != null &&
			    (strL_numeroObra.equalsIgnoreCase("TODAS") || 
				strL_numeroObra.equals(""))) {
				strL_rutaJasper = "jreport/ReporteCuentaObraTODAS.jasper";
			} else {
				strL_rutaJasper = "jreport/ReporteCuentaObra.jasper";
			}
			
			OpcionesApService objL_service= new OpcionesApService();
			
			// Antes de llamar al reporte, se inserta data en el log de opciones
			objL_service.registrarOpcionesAp( request.getRemoteUser(), "ReporteCuentaObra.jasper","SICCO", "INI");
			
			File objL_jasperFile = new File(getServlet().getServletContext().getRealPath("/")
			+ strL_rutaJasper);
			
			if (!objL_jasperFile.exists())
				throw new JRRuntimeException("No se encontro el archivo '"
				+ strL_rutaJasper + "'");

			JasperReport objL_jasperReport = (JasperReport) JRLoader.loadObject(objL_jasperFile.getPath());

			Map<String, Object> aobjL_parameters = new HashMap<String, Object>();
			aobjL_parameters.put("SUBREPORT_DIR", (getServlet().getServletContext().getRealPath("/") + "jreport/"));
			aobjL_parameters.put("IMAGE_DIR", (getServlet().getServletContext().getRealPath("/") + "images/"));

			ServletOutputStream objL_ouputStream = response.getOutputStream();

			JasperPrint objL_jasperPrint;
			if (strL_numeroObra != null	&& (strL_numeroObra.equalsIgnoreCase("TODAS") 
					|| strL_numeroObra.equals(""))) {
				objL_jasperPrint = JasperFillManager.fillReport(objL_jasperReport,
						aobjL_parameters, 
						new JRBeanCollectionDataSource(DSCuentaObra.getLstRBCuentaObra()));

			} else {
				objL_jasperPrint = JasperFillManager.fillReport(objL_jasperReport,
						aobjL_parameters, 
						new JRBeanCollectionDataSource(DSCuentaObra.getCuentaObraBeanCollection()));
			}

			JRPdfExporter objL_exporter = new JRPdfExporter();

			objL_exporter.setParameter(JRExporterParameter.JASPER_PRINT, objL_jasperPrint);
			objL_exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, objL_ouputStream);
			response.setContentType("application/pdf");

			response.setHeader("Content-Disposition", "attachment; filename="
			+ "REPORTE_CuentasObra.pdf");

			objL_exporter.exportReport();

			objL_ouputStream.flush();
			objL_ouputStream.close();

			return null; // NO LLEVA FORWARD, EL FLUSH DEVUELVE
		} catch (JRException e) {
			e.printStackTrace();
			request.setAttribute("detalleErrorJasperReport",
					"ConsultaAction-exportarCuentasObraProcess: "
				    + e.getMessage());
			
			Logging.log(this.getClass(), e.getMessage(), e);
			return mapping.findForward("error");
		} catch (Exception e) {
			e.printStackTrace();
			request.setAttribute("detalleError",
					"ConsultaAction-exportarCuentasObraProcess: "
					+ e.getMessage());
			
			Logging.log(this.getClass(), e.getMessage(), e);
			return mapping.findForward("error");
		}
	}

	public ActionForward exportarDocumentoObraProcess(ActionMapping mapping,
			ActionForm form, HttpServletRequest request,
			HttpServletResponse response) throws IOException, ServletException {

		try {
			String strL_rutaJasper = "";

			strL_rutaJasper = "jreport/DocObra.jasper";

			File objL_jasperFile = new File(getServlet().getServletContext().getRealPath("/")
			+ strL_rutaJasper);
			
			if (!objL_jasperFile.exists())
				throw new JRRuntimeException("No se encontro el archivo '"
						+ strL_rutaJasper + "'");

			JasperReport objL_jasperReport = (JasperReport) JRLoader.loadObject(objL_jasperFile.getPath());
			
			OpcionesApService objL_service= new OpcionesApService();
			// Antes de llamar al reporte, se inserta data en el log de opciones
			//objL_service.registrarOpcionesAp( request.getRemoteUser(), "DocObra.jasper","SICCO", "INI");
			

			Map<String, Object> aobjL_parameters = new HashMap<String, Object>();
			aobjL_parameters.put("SUBREPORT_DIR", (getServlet().getServletContext().getRealPath("/") + "jreport/"));
			aobjL_parameters.put("IMAGE_DIR", (getServlet().getServletContext().getRealPath("/") + "images/"));

			ServletOutputStream objL_ouputStream = response.getOutputStream();

			JasperPrint objL_jasperPrint;

			System.out.println(DSDocumentoObra.getDocumentoObraCollection().size());

			objL_jasperPrint = JasperFillManager.fillReport(objL_jasperReport,
					aobjL_parameters, 
					new JRBeanCollectionDataSource(DSDocumentoObra.getDocumentoObraCollection()));

			JRPdfExporter objL_exporter = new JRPdfExporter();

			objL_exporter.setParameter(JRExporterParameter.JASPER_PRINT, objL_jasperPrint);
			objL_exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, objL_ouputStream);
			response.setContentType("application/pdf");

			response.setHeader("Content-Disposition", "attachment; filename="
			+ "REPORTE_DocumentoObra.pdf");

			objL_exporter.exportReport();

			objL_ouputStream.flush();
			objL_ouputStream.close();

			return null;

		} catch (Exception e) {
			e.printStackTrace();
			request.setAttribute("detalleError",
					"ConsultaAction-exportarDocumentoObraProcess: "
					+ e.getMessage());
			
			Logging.log(this.getClass(), e.getMessage(), e);
			return mapping.findForward("error");
		}

	}

	private List<SaldoBean> solicitaRespuestaSaldosPendientesObras(
			ParametrosConsultaObra objA_parametros) 
	throws Exception {
		
		List<SaldoBean> aobjL_listaReporte = new ArrayList<SaldoBean>();
		ObraSaldosPendientesService objL_service = new ObraSaldosPendientesService();
		aobjL_listaReporte = objL_service.consultarSaldosPendientes(objA_parametros);
		return aobjL_listaReporte;
	}

	private List<DepositoBancario> solicitaRespuestaDepositosObras(
			ParametrosConsultaObra objA_parametros) 
	throws Exception {
		List<DepositoBancario> aobjL_listaReporte = new ArrayList<DepositoBancario>();
		ObraDepositosClienteService objL_service = new ObraDepositosClienteService();
		aobjL_listaReporte = objL_service.consultarDepositosClienteObra(objA_parametros);
		return aobjL_listaReporte;
	}

	private List<ObraNotaCredito> solicitaRespuestaOtrasNotasCredito(
			ParametrosConsultaObra objA_parametros) 
	throws Exception {
		List<ObraNotaCredito> aobjL_listaReporte = new ArrayList<ObraNotaCredito>();
		ObraOtrasNotasCreditoService objL_service = new ObraOtrasNotasCreditoService();
		aobjL_listaReporte = objL_service.consultarOtrasNotasCredito(objA_parametros);
		return aobjL_listaReporte;
	}

	private List<DocumentoCliente> solicitaRespuestaOtrasNotasDebito(
			ParametrosConsultaObra objA_parametros) 
	throws Exception {
		List<DocumentoCliente> aobjL_listaReporte = new ArrayList<DocumentoCliente>();
		ObraOtrasNotasDebitoService objL_service = new ObraOtrasNotasDebitoService();
		aobjL_listaReporte = objL_service.consultarOtrasNotasDebito(objA_parametros);
		return aobjL_listaReporte;
	}

	private List<DocumentoCliente> solicitaRespuestaOtrasFacturas(
			ParametrosConsultaObra objA_parametros) 
    throws Exception {
		List<DocumentoCliente> aobjL_listaReporte = new ArrayList<DocumentoCliente>();
		ObraOtrasFacturasService objL_service = new ObraOtrasFacturasService();
		aobjL_listaReporte = objL_service.consultarOtrasFacturas(objA_parametros);
		return aobjL_listaReporte;
	}

	private List<ObraNotaCredito> solicitaRespuestaNotaCreditoObra(
			ParametrosConsultaObra objA_parametros, Boolean blnA_obraTODAS)
	throws Exception {
		List<ObraNotaCredito> aobjL_listaReporte = new ArrayList<ObraNotaCredito>();
		ObraNotaCreditoService objL_service = new ObraNotaCreditoService();
		aobjL_listaReporte = objL_service.consultarNotaCreditoObra(objA_parametros, blnA_obraTODAS);
		return aobjL_listaReporte;
	}

	private List<ObraEnDiseno> solicitaRespuestaEnDiseno(
			ParametrosConsultaObra objA_parametros) 
	throws Exception {
		List<ObraEnDiseno> aobjL_listaReporte = new ArrayList<ObraEnDiseno>();
		ObraEnDisenoService objL_service = new ObraEnDisenoService();
		aobjL_listaReporte = objL_service.consultarEnDisenoObra(objA_parametros);
		return aobjL_listaReporte;
	}

	private List<ObraEnFabricacion> solicitaRespuestaEnFabricacion(
			ParametrosConsultaObra objA_parametros) 
	throws Exception {
		List<ObraEnFabricacion> aobjL_listaReporte = new ArrayList<ObraEnFabricacion>();
		ObraEnFabricacionService objL_service = new ObraEnFabricacionService();
		aobjL_listaReporte = objL_service.consultarEnFabricacionObra(objA_parametros);
		return aobjL_listaReporte;
	}

	private List<ObraFacturado> solicitaRespuestaFacturados(
			ParametrosConsultaObra objA_parametros) 
	throws Exception {
		List<ObraFacturado> aobjL_listaReporte = new ArrayList<ObraFacturado>();
		ObraFacturadoService objL_service = new ObraFacturadoService();
		aobjL_listaReporte = objL_service.consultarFacturadoObra(objA_parametros);
		return aobjL_listaReporte;
	}

	private List<ObraFacturaFinanciera> solicitaRespuestaFacturasFinancieras(
			ParametrosConsultaObra objA_parametros) 
	throws Exception {

		List<ObraFacturaFinanciera> aobjL_listaReporte = new ArrayList<ObraFacturaFinanciera>();
		ObraFacturaFinancieraService objL_service = new ObraFacturaFinancieraService();
		aobjL_listaReporte = objL_service.consultarFacturasFinancierasObra(objA_parametros);
		return aobjL_listaReporte;
	}

	private ParametrosConsultaObra extraeParametrosConsultaObra(
			ActionForm objA_actionForm, Object objL_object) 
	throws Exception {

		ConsultaForm objL_consultForm = (ConsultaForm) objA_actionForm;
		ParametrosConsultaObra objL_consultaObra = new ParametrosConsultaObra();
		extraeParametrosConsulta(objA_actionForm, objL_consultaObra);
		String strA_numeroObra = objL_consultForm.getStrPb_obraSeleccionada();
		String strA_estado = objL_consultForm.getStrPb_estadoElementosCuenta();
		objL_consultaObra.setStrPb_numeroObra(strA_numeroObra);
		objL_consultaObra.setStrPb_estado(strA_estado);

		return objL_consultaObra;
	}

	public ActionForward consultaNotasCreditoHome(ActionMapping mapping,
			ActionForm objA_actionForm, HttpServletRequest request,
			HttpServletResponse response) 
    throws IOException, ServletException {
		try {

			ConsultaForm objL_consultForm = (ConsultaForm) objA_actionForm;

			// TODO - Duplicacion de codigo de seteo del form
			objL_consultForm.setStrPb_codigoCliente("");
			objL_consultForm.setStrPb_nombreCliente("");
			objL_consultForm.setStrPb_fechaInicio("");
			objL_consultForm.setStrPb_fechaFin("");

			cargaCodigoClienteEnFormulario(request, objL_consultForm);

			request.getSession(false).setAttribute("listaNotasCredito", null);

			// seteamos el codigo del cliente en caso sea CLIENTE
			String strL_tipoUsuario = (String) request.getSession(false).getAttribute("tipoUser");
			String strL_codigo = (String) request.getSession(false).getAttribute("codigoUser");
			if (strL_tipoUsuario.equals("CLIENTE")) {
				ClienteService objL_clienteService = new ClienteService();
				ClienteBean objL_cliente = null;
				objL_cliente = objL_clienteService.obtenCliente(strL_codigo);
				String strL_nombreCliente = (objL_cliente == null) ? 
						"No se encuentra el cliente": objL_cliente.getStrPb_nombre();
				objL_consultForm.setStrPb_codigoCliente(strL_codigo);
				objL_consultForm.setStrPb_nombreCliente(strL_nombreCliente);
			}

			return mapping.findForward("ConsultaNotasCredito");
		} catch (Exception e) {
			e.printStackTrace();
			request.setAttribute("detalleError",
					"ConsultaAction-consultaNotasCreditoHome: "
					+ e.getMessage());
			
			return mapping.findForward("error");
		}
	}

	public ActionForward consultaDeudasVencidasHome(ActionMapping mapping,
			ActionForm objA_actionForm, HttpServletRequest request,
			HttpServletResponse response) 
	throws IOException, ServletException {
		try {

			ConsultaForm objL_consultForm = (ConsultaForm) objA_actionForm;

			objL_consultForm.setStrPb_codigoCliente("");
			objL_consultForm.setStrPb_nombreCliente("");
			objL_consultForm.setStrPb_fechaFin("");

			cargaCodigoClienteEnFormulario(request, objL_consultForm);

			request.getSession(false).setAttribute("listaDocumentosClientes",null);
			request.getSession(false).setAttribute("listaNotasCredito", null);
			request.getSession(false).setAttribute("listaSaldosFavor", null);
			request.getSession(false).setAttribute("listaSaldosPendientes",null);
			request.getSession(false).setAttribute("listaCuentasSaplicacionC",null);

			//SETEO CODIGO CLIENTE
			String strL_tipoUsuario = (String) request.getSession(false).getAttribute("tipoUser");
			String strL_codigo = (String) request.getSession(false).getAttribute("codigoUser");
			if (strL_tipoUsuario.equals("CLIENTE")) {
				ClienteService objL_clienteService = new ClienteService();
				ClienteBean objL_cliente = null;
				objL_cliente = objL_clienteService.obtenCliente(strL_codigo);
				String nombreCliente = (objL_cliente == null) ? 
						"No se encuentra el cliente": objL_cliente.getStrPb_nombre();
				objL_consultForm.setStrPb_codigoCliente(strL_codigo);
				objL_consultForm.setStrPb_nombreCliente(nombreCliente);
			}

			return mapping.findForward("ConsultaDeudasVencidas");
		} catch (Exception e) {
			e.printStackTrace();
			request.setAttribute("detalleError",
					"ConsultaAction-consultaDeudasVencidasHome: "
					+ e.getMessage());
		
			Logging.log(this.getClass(), e.getMessage(), e);
			return mapping.findForward("error");
		}
	}

	public ActionForward consultaDeudasVencidasProcess(ActionMapping mapping,
			ActionForm objA_actionForm, HttpServletRequest request,
			HttpServletResponse response) throws IOException, ServletException {
		try {
			ParametrosGenerales objL_parametros = extraeParametrosConsulta(objA_actionForm,null);
			List<CuentaCorriente> aobjL_respuestaConsulta = solicitaRespuestaConsultaDeudasVencidas(objL_parametros);
			request.getSession(false).setAttribute("listaDocumentosClientes",aobjL_respuestaConsulta);
			request.getSession(false).setAttribute("listaNotasCredito", null);
			request.getSession(false).setAttribute("listaSaldosFavor", null);
			request.getSession(false).setAttribute("listaSaldosPendientes",null);
			request.getSession(false).setAttribute("listaCuentasSaplicacionC",null);
			request.getSession(false).setAttribute("numDeudas",aobjL_respuestaConsulta.size());
			
			ConsultaForm objL_consultForm = (ConsultaForm) objA_actionForm;
			DateFormat objL_dateFormat = new SimpleDateFormat("dd/MM/yyyy");
			Date datL_fechaFin = objL_parametros.getObjPb_fechaFin();
			objL_consultForm.setStrPb_fechaFin(datL_fechaFin == null ? "" : objL_dateFormat.format(datL_fechaFin));

			// Carga del ReportBean para la creacion del reporte:
			RBDeudaVencida.reset();
			RBDeudaVencida.setStaLstCuentaCorriente(aobjL_respuestaConsulta);

			String strL_codigo = objL_parametros.getStrPb_codigoCliente();
			ClienteBean objL_Cliente = new ClienteBean();
			ClienteService objL_ClienteService = new ClienteService();
			objL_Cliente = objL_ClienteService.obtenCliente(strL_codigo);
			/*
			 * objCliente.setCodigo(codigo); objCliente.setNombre((String)
			 * request.getSession().getAttribute("nombreCliente"));
			 * objCliente.setRuc((String)
			 * request.getSession().getAttribute("rucCliente"));
			 */
			RBDeudaVencida.setStaObjCliente(objL_Cliente);
			RBDeudaVencida.setStaFechaInicio(objL_parametros.getObjPb_fechaInicio());
			RBDeudaVencida.setStaFechaFin(objL_parametros.getObjPb_fechaFin());

			// cargamos el nombre del cliente despues de la busqueda
			ClienteService objL_clienteService = new ClienteService();
			ClienteBean objL_cliente = null;
			objL_cliente = objL_clienteService.obtenCliente(strL_codigo);
			String nombreCliente = (objL_cliente == null) ? 
					"No se encuentra el cliente": objL_cliente.getStrPb_nombre();
			objL_consultForm.setStrPb_nombreCliente(nombreCliente);

			if (request.getParameter("flgExportar") != null) {
				return mapping.findForward("ConsultaDeudasVencidasExportar");
			} else {
				return mapping.findForward("ConsultaDeudasVencidas");
			}

		} catch (Exception e) {
			e.printStackTrace();
			request.setAttribute("detalleError",
					"ConsultaAction-consultaDeudasVencidasProcess: "
					+ e.getMessage());
			
			Logging.log(this.getClass(), e.getMessage(), e);
			return mapping.findForward("error");
		}
	}

	public ActionForward exportarDeudasVencidasProcess(ActionMapping mapping,
			ActionForm objA_actionForm, HttpServletRequest request,
			HttpServletResponse response) throws IOException, ServletException {
		try {
			
			
			
			String strL_rutaJasper = "jreport/ReporteDeudaVencida.jasper";
			File objL_jasperFile = new File(getServlet().getServletContext().getRealPath("/")
			+ strL_rutaJasper);
			
			if (!objL_jasperFile.exists())
				throw new JRRuntimeException("No se encontro el archivo '"+ strL_rutaJasper + "'");

			JasperReport objL_jasperReport = (JasperReport) JRLoader.loadObject(objL_jasperFile.getPath());

			Map<String, Object> aobjL_parameters = new HashMap<String, Object>();
			aobjL_parameters.put("SUBREPORT_DIR", (getServlet().getServletContext().getRealPath("/") + "jreport/"));
			aobjL_parameters.put("IMAGE_DIR", (getServlet().getServletContext().getRealPath("/") + "images/"));
			
			OpcionesApService objL_service= new OpcionesApService();
			// Antes de llamar al reporte, se inserta data en el log de opciones
			//objL_service.registrarOpcionesAp( request.getRemoteUser(), "ReporteDeudaVencida.jasper","SICCO", "INI");
			
			ServletOutputStream objL_ouputStream = response.getOutputStream();

			JasperPrint objL_jasperPrint = JasperFillManager.fillReport(objL_jasperReport, 
					aobjL_parameters, new JRBeanCollectionDataSource(DSDeudaVencida.getDeudaVencidaBeanCollection()));

			JRPdfExporter objL_exporter = new JRPdfExporter();

			objL_exporter.setParameter(JRExporterParameter.JASPER_PRINT, objL_jasperPrint);
			objL_exporter.setParameter(JRExporterParameter.OUTPUT_STREAM,objL_ouputStream);
			response.setContentType("application/pdf");

			response.setHeader("Content-Disposition", "attachment; filename="
			+ "REPORTE_DeudasVencidas.pdf");
            
			
			
			objL_exporter.exportReport();

			objL_ouputStream.flush();
			objL_ouputStream.close();

			return null; // NO LLEVA FORWARD, EL FLUSH DEVUELVE
		} catch (JRException e) {
			e.printStackTrace();
			request.setAttribute("detalleErrorJasperReport",
					"ConsultaAction-exportarDeudasVencidasProcess: "
					+ e.getMessage());
			
			Logging.log(this.getClass(), e.getMessage(), e);
			return mapping.findForward("error");
		} catch (Exception e) {
			e.printStackTrace();
			request.setAttribute("detalleError",
			"ConsultaAction-exportarvProcess: " + e.getMessage());
			
			Logging.log(this.getClass(), e.getMessage(), e);
			return mapping.findForward("error");
		}
	}

	public ActionForward consultaNotasCreditoProcess(ActionMapping mapping,
			ActionForm objA_actionForm, HttpServletRequest request,
			HttpServletResponse response) 
	throws IOException, ServletException {
		try {

			ParametrosGenerales objL_parametros = extraeParametrosConsulta(objA_actionForm,null);
			List<NotaCredito> aobjL_respuestaConsulta = solicitaRespuestaConsultaNotasCredito(objL_parametros);
			enviaResultadosConsultaNotasCredito(request, aobjL_respuestaConsulta);

			ConsultaForm objL_consultForm = (ConsultaForm) objA_actionForm;

			DateFormat objL_dateFormat = new SimpleDateFormat("dd/MM/yyyy");
			Date datL_fechaInicio = objL_parametros.getObjPb_fechaInicio();
			objL_consultForm.setStrPb_fechaInicio(datL_fechaInicio == null ? 
					"" : objL_dateFormat.format(datL_fechaInicio));
			Date datL_fechaFin = objL_parametros.getObjPb_fechaFin();
			objL_consultForm.setStrPb_fechaFin(datL_fechaFin == null ? 
					"" : objL_dateFormat.format(datL_fechaFin));

			// Carga del ReportBean para la creacion del reporte:
			RBNotaCredito.reset();
			RBNotaCredito.setStaLstNotaCredito(aobjL_respuestaConsulta);
			String strL_codigo = objL_parametros.getStrPb_codigoCliente();
			ClienteBean objL_Cliente = new ClienteBean();
			ClienteService objL_ClienteService = new ClienteService();
			objL_Cliente = objL_ClienteService.obtenCliente(strL_codigo);
			/*
			 * objCliente.setCodigo(codigo); objCliente.setNombre((String)
			 * request.getSession().getAttribute("nombreCliente"));
			 * objCliente.setRuc((String)
			 * request.getSession().getAttribute("rucCliente"));
			 */

			RBNotaCredito.setStaObjCliente(objL_Cliente);
			RBNotaCredito.setStaFechaInicio(objL_parametros.getObjPb_fechaInicio());
			RBNotaCredito.setStaFechaFin(objL_parametros.getObjPb_fechaFin());

			// cargamos el nombre del cliente despues de la busqueda
			ClienteService objL_clienteService = new ClienteService();
			ClienteBean objL_cliente = null;
			objL_cliente = objL_clienteService.obtenCliente(strL_codigo);
			String nombreCliente = (objL_cliente == null) ? 
					"No se encuentra el cliente": objL_cliente.getStrPb_nombre();
			objL_consultForm.setStrPb_nombreCliente(nombreCliente);

			if (request.getParameter("flgExportar") != null) {
				return mapping.findForward("ConsultaNotasCreditoExportar");
			} else {
				return mapping.findForward("ConsultaNotasCredito");
			}

		} catch (Exception e) {
			e.printStackTrace();
			// TODO !! - Cambiar para que obtenga dinamicamente los nombres de
			// los metodos
			request.setAttribute("detalleError",
					"ConsultaAction-consultaNotasCreditoProcess: "
					+ e.getMessage());
			
			Logging.log(this.getClass(), e.getMessage(), e);
			return mapping.findForward("error");
		}
	}

	public ActionForward exportarNotasCreditoProcess(ActionMapping mapping,
			ActionForm objA_actionForm, HttpServletRequest request,
			HttpServletResponse response) 
	throws IOException, ServletException {
		try {
			String strL_rutaJasper = "jreport/ReporteNotaCredito.jasper";
			File objL_jasperFile = new File(getServlet().getServletContext().getRealPath("/")+ strL_rutaJasper);
			
			if (!objL_jasperFile.exists())
				throw new JRRuntimeException("No se encontro el archivo '" + strL_rutaJasper + "'");

			JasperReport objL_jasperReport = (JasperReport) JRLoader.loadObject(objL_jasperFile.getPath());

			Map<String, Object> aobjL_parameters = new HashMap<String, Object>();
			aobjL_parameters.put("SUBREPORT_DIR", (getServlet().getServletContext().getRealPath("/") + "jreport/"));
			aobjL_parameters.put("IMAGE_DIR", (getServlet().getServletContext().getRealPath("/") + "images/"));
			
			
			OpcionesApService objL_service= new OpcionesApService();
			// Antes de llamar al reporte, se inserta data en el log de opciones
			//objL_service.registrarOpcionesAp( request.getRemoteUser(), "ReporteNotaCredito.jasper","SICCO", "INI");
			

			ServletOutputStream objL_ouputStream = response.getOutputStream();

			JasperPrint jasperPrint = JasperFillManager.fillReport(
					objL_jasperReport, aobjL_parameters, 
					new JRBeanCollectionDataSource(DSNotaCredito.getNotaCreditoBeanCollection()));

			JRPdfExporter objL_exporter = new JRPdfExporter();

			objL_exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
			objL_exporter.setParameter(JRExporterParameter.OUTPUT_STREAM,objL_ouputStream);
			response.setContentType("application/pdf");

			response.setHeader("Content-Disposition", "attachment; filename="
			+ "REPORTE_NotasCredito.pdf");

			objL_exporter.exportReport();

			objL_ouputStream.flush();
			objL_ouputStream.close();

			return null; // NO LLEVA FORWARD, EL FLUSH DEVUELVE
		} catch (JRException e) {
			e.printStackTrace();
			request.setAttribute("detalleErrorJasperReport",
					"ConsultaAction-exportarNotasCreditoProcess: "
					+ e.getMessage());
			
			Logging.log(this.getClass(), e.getMessage(), e);
			return mapping.findForward("error");
		} catch (Exception e) {
			e.printStackTrace();
			request.setAttribute("detalleError",
					"ConsultaAction-exportarNotasCreditoProcess: "
					+ e.getMessage());
			
			Logging.log(this.getClass(), e.getMessage(), e);
			return mapping.findForward("error");
		}
	}

	public ActionForward exportarConsultaSaldo(ActionMapping mapping,
			ActionForm objA_actionForm, HttpServletRequest request,
			HttpServletResponse response) 
	throws IOException, ServletException {

		ConsultaForm objL_consultForm = (ConsultaForm) objA_actionForm;
		String strL_rutaJasper = "";

		String strL_opcion = request.getParameter("opcion");

		try {

			ParametrosConsultaCuentaCorriente objL_parametros = extraeParametrosConsultaCuentasCorrientes(objA_actionForm);

			NotaCreditoService objL_ncservice = new NotaCreditoService();
			List<NotaCredito> aobjL_respuestaNotasCredito = objL_ncservice.consultarSaldoNc(objL_parametros);

			SaldoService objL_saservice = new SaldoService();

			List<SaldoBean> aobjL_respuestaSaldosFavor = objL_saservice.consultarSaldos(objL_parametros);

			RBCuentaCorriente.reset();

			RBCuentaCorriente.setStaLstNotasCredito(aobjL_respuestaNotasCredito);
			RBCuentaCorriente.setStaLstSaldosFavor(aobjL_respuestaSaldosFavor);

			Double dblL_cambio = new Double(request.getSession(false).getAttribute("tipoCambio").toString());
			RBCuentaCorriente.setStaFltTipoCambio(dblL_cambio);

			String strL_codigo = objL_parametros.getStrPb_codigoCliente();
			ClienteBean objL_Cliente = new ClienteBean();
			ClienteService objL_ClienteService = new ClienteService();
			objL_Cliente = objL_ClienteService.obtenCliente(strL_codigo);

			RBCuentaCorriente.setStaObjCliente(objL_Cliente);

			if (strL_opcion.equalsIgnoreCase("Saldo")) {
				strL_rutaJasper = "jreport/ReporteEfec.jasper";

			} else {
				strL_rutaJasper = "jreport/ReporteSaldo.jasper";
			}

			File objL_jasperFile = new File(getServlet().getServletContext().getRealPath("/")
			+ strL_rutaJasper);

			if (!objL_jasperFile.exists())
				throw new JRRuntimeException("No se encontro el archivo '"
				+ strL_rutaJasper + "'");

			JasperReport objL_jasperReport = (JasperReport) JRLoader.loadObject(objL_jasperFile.getPath());

			Map<String, Object> aobjL_parameters = new HashMap<String, Object>();

			aobjL_parameters.put("SUBREPORT_DIR", (getServlet().getServletContext().getRealPath("/") + "jreport/"));
			aobjL_parameters.put("IMAGE_DIR", (getServlet().getServletContext().getRealPath("/") + "images/"));

			ServletOutputStream objL_ouputStream = response.getOutputStream();

			JasperPrint objL_jasperPrint = JasperFillManager.fillReport(
					objL_jasperReport, aobjL_parameters, 
					new JRBeanCollectionDataSource(DSCuentaCorriente.getCuentaCorrienteBeanCollection()));

			JRPdfExporter objL_exporter = new JRPdfExporter();

			objL_exporter.setParameter(JRExporterParameter.JASPER_PRINT, objL_jasperPrint);
			objL_exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, objL_ouputStream);
			response.setContentType("application/pdf");

			response.setHeader("Content-Disposition", "attachment; filename="
			+ "REPORTE_Saldos.pdf");

			objL_exporter.exportReport();

			objL_ouputStream.flush();
			objL_ouputStream.close();

			return null;

		} catch (Exception e) {
			e.printStackTrace();
			request.setAttribute("detalleError",
			"ConsultaAction-exportarSaldos: " + e.getMessage());
			
			Logging.log(this.getClass(), e.getMessage(), e);
			return mapping.findForward("error");
		}

	}

	private List<NotaCredito> solicitaRespuestaConsultaNotasCredito(
			ParametrosGenerales objA_parametros) 
	throws Exception {
		List<NotaCredito> aobjL_listaNotasCredito = new ArrayList<NotaCredito>();
		NotaCreditoService objL_notaCreditoService = new NotaCreditoService();
		aobjL_listaNotasCredito = objL_notaCreditoService.consultarNotasCreditoCompleta(objA_parametros);
		return aobjL_listaNotasCredito;
	}

	private List<CuentaCorriente> solicitaRespuestaConsultaDeudasVencidas(
			ParametrosGenerales objA_parametros) 
	throws Exception {
		List<CuentaCorriente> aobjL_listaCuentasCorrientes = new ArrayList<CuentaCorriente>();
		CuentaCorrienteService objL_cuentaCorrienteService = new CuentaCorrienteService();
		aobjL_listaCuentasCorrientes = objL_cuentaCorrienteService.consultarDeudasVencidas(objA_parametros);
		return aobjL_listaCuentasCorrientes;
	}

	private void enviaResultadosConsultaNotasCredito(
			HttpServletRequest request, List<NotaCredito> respuestaConsulta) {

		request.getSession(false).setAttribute("listaNotasCredito",respuestaConsulta);
	}

	public void cargaCodigoClienteEnFormulario(HttpServletRequest request,
			ConsultaForm consultForm) {
		String strL_tipoUsuario = (String) request.getSession(false).getAttribute("tipoUser");
		String strL_codigo = (String) request.getSession(false).getAttribute("codigoUser");

		if (strL_tipoUsuario.equals("CLIENTE"))
			consultForm.setStrPb_codigoCliente(strL_codigo);
	}

	public ActionForward consultaCuentasCorrientesHome(ActionMapping mapping,
			ActionForm objA_actionForm, HttpServletRequest request,
			HttpServletResponse response) 
	throws IOException, ServletException {
		try {

			ConsultaForm objL_consultaForm = (ConsultaForm) objA_actionForm;

			objL_consultaForm.setStrPb_codigoCliente("");
			objL_consultaForm.setStrPb_nombreCliente("");
			objL_consultaForm.setStrPb_fechaInicio("");
			objL_consultaForm.setStrPb_fechaFin("");
			objL_consultaForm.setStrPb_aplicacionCuentasCorrientes("CA");

			cargaCodigoClienteEnFormulario(request, objL_consultaForm);

			// cargamos la lista de los estados para las consultas de Cta Cte
			List<ValorCombo> aobjL_listaEstado = new ArrayList<ValorCombo>();
			aobjL_listaEstado.add(new ValorCombo(" ", "Deudas"));
			aobjL_listaEstado.add(new ValorCombo("B", "Cancelado"));
			aobjL_listaEstado.add(new ValorCombo("%", "Todos"));
			objL_consultaForm.setListaEstadoCuenta(aobjL_listaEstado);

			request.getSession(false).setAttribute("listaDocumentosClientes",null);
			request.getSession(false).setAttribute("listaNotasCredito", null);
			request.getSession(false).setAttribute("listaSaldosFavor", null);
			request.getSession(false).setAttribute("listaSaldosPendientes",	null);
			request.getSession(false).setAttribute("listaDepositosBancarios",null);
			request.getSession(false).setAttribute("listaCuentasSaplicacionC",null);
			request.getSession(false).setAttribute("listaCuentasSaplicacionSoloDeudasPrincipal", null);
			request.getSession(false).setAttribute("listaCuentasSaplicacionSoloDeudasNotaCredito", null);
			request.getSession(false).setAttribute("listaCuentasSaplicacionSoloDeudasSaldoFavor", null);
			request.getSession(false).setAttribute("listaCuentasSaplicacionSoloDeudasSaldoPendiente", null);

			// seteamos el codigo del cliente en caso sea CLIENTE
			String strL_tipoUsuario = (String) request.getSession(false).getAttribute("tipoUser");
			String strL_codigo = (String) request.getSession(false).getAttribute("codigoUser");
			
			if (strL_tipoUsuario.equals("CLIENTE")) {
				ClienteService objL_clienteService = new ClienteService();
				ClienteBean objL_clienteBean = null;
				objL_clienteBean = objL_clienteService.obtenCliente(strL_codigo);
				
				String strL_nombreCliente = (objL_clienteBean == null) ? "No se encuentra el cliente": objL_clienteBean.getStrPb_nombre();
				objL_consultaForm.setStrPb_codigoCliente(strL_codigo);
				objL_consultaForm.setStrPb_nombreCliente(strL_nombreCliente);
			}

			return mapping.findForward("ConsultaCuentasCorrientes");
		} catch (Exception e) {
			e.printStackTrace();
			request.setAttribute("detalleError","ConsultaAction-consultaCuentasCorrientesHome: "+ e.getMessage());
			
			Logging.log(this.getClass(), e.getMessage(), e);
			return mapping.findForward("error");
		}
	}

	public ActionForward consultaCuentasCorrientesProcess(
			ActionMapping mapping, ActionForm form, HttpServletRequest request,
			HttpServletResponse response) 
	throws IOException, ServletException {
		try {//*setea estado y aplicacion,fecini_fecfin,codCli
			ParametrosConsultaCuentaCorriente objL_parametrosConsultaCuentaCorriente = extraeParametrosConsultaCuentasCorrientes(form);
			ParametrosConsultaCuentaClienteSaplicacion objL_parametrosConsultaCuentaClienteAplicacion = extraeParametrosConsultaCuentasCorrientesSaplicacion(form);
			//*setea estado y aplicacion,fecini_fecfin,codCli
			//condicion=lista sin aplicacion ya sea con deudas o cancelaDAS si no cumple condicion devuelve lista vacia 
			List<CuentaCorriente> aobjL_respuestaDocumentosClientes = solicitaRespuestaConsultaDocumentosClientes(objL_parametrosConsultaCuentaCorriente);
			//*se emitira cuando se seleccione sin aplicacion y el estado sea !=B,con deudas
			List<NotaCredito> aobjL_respuestaNotasCredito = solicitaRespuestaNotasCredito(objL_parametrosConsultaCuentaCorriente);
			
			List<SaldoBean> aobjL_respuestaSaldosFavor = solicitaRespuestaConsultaSaldosFavor(objL_parametrosConsultaCuentaCorriente);
			
			List<SaldoBean> aobjL_respuestaSaldosPendientes = solicitaRespuestaConsultaSaldosPendientes(objL_parametrosConsultaCuentaCorriente);

			// lista para cuentas cte, con aplicacion cancelado
			List<CtaCteCliente> aobjL_respuestaConsultaCuentasAplicacion = solicitaRespuestaCuentaClienteSaplicacionCanceladas(objL_parametrosConsultaCuentaClienteAplicacion);

			// lista para cuenta cte, con aplicacion deudas, o todos
			CuentaClienteSaplicacionSoloDeudas objL_respuestaConsultaCuentasAplicacionSoloDeudas = solicitaRespuestaCuentaClienteSaplicacionSoloDeudas(objL_parametrosConsultaCuentaClienteAplicacion);

			request.getSession(false).setAttribute("listaDocumentosClientes",aobjL_respuestaDocumentosClientes);
			request.getSession(false).setAttribute("listaNotasCredito",aobjL_respuestaNotasCredito);
			request.getSession(false).setAttribute("listaSaldosFavor",aobjL_respuestaSaldosFavor);
			request.getSession(false).setAttribute("listaSaldosPendientes",aobjL_respuestaSaldosPendientes);

			/*
			 * if(respuestaDocumentosClientes.size()==0){ CuentaCorriente temp =
			 * new CuentaCorriente(); temp.setSerie("&nbsp;");
			 * respuestaDocumentosClientes.add(temp); }
			 * if(respuestaNotasCredito.size()==0){ NotaCredito temp = new
			 * NotaCredito(); temp.setSerieManual("&nbsp;");
			 * respuestaNotasCredito.add(temp); }
			 * if(respuestaSaldosFavor.size()==0){ Saldo temp = new Saldo();
			 * temp.setSerie("&nbsp;"); respuestaSaldosFavor.add(temp); }
			 * if(respuestaSaldosPendientes.size()==0){ Saldo temp = new
			 * Saldo(); temp.setSerie("&nbsp;");
			 * respuestaSaldosPendientes.add(temp); }
			 */

			// SACAMOS LA LISTA DE DOCUMENTOS CANCELADOS CON APLICACION
			List<CtaCteDocumentosDeuda> aObjL_listaDocCancelado = new ArrayList<CtaCteDocumentosDeuda>();
			
			if (aobjL_respuestaConsultaCuentasAplicacion != null&& aobjL_respuestaConsultaCuentasAplicacion.size() > 0) {
				if (aobjL_respuestaConsultaCuentasAplicacion.get(0).getLstDocumentosDeuda() != null&& aobjL_respuestaConsultaCuentasAplicacion.get(0).getLstDocumentosDeuda().size() > 0) {
					aObjL_listaDocCancelado = aobjL_respuestaConsultaCuentasAplicacion.get(0).getLstDocumentosDeuda();
				}
			}

			// SACAMOS LA LISTA DE DOCUMENTOS CANCELADOS DEUDAS O TODOS
			List<CtaCteDocumentosDeuda> aobjL_listaDocDeudaPrincipal = new ArrayList<CtaCteDocumentosDeuda>();
			
			if (objL_respuestaConsultaCuentasAplicacionSoloDeudas.getListaClientesSinAplicacionDeudasPrincipal() != null&& objL_respuestaConsultaCuentasAplicacionSoloDeudas.getListaClientesSinAplicacionDeudasPrincipal().size() > 0) {
				if (objL_respuestaConsultaCuentasAplicacionSoloDeudas.getListaClientesSinAplicacionDeudasPrincipal().get(0).getLstDocumentosDeuda() != null&& objL_respuestaConsultaCuentasAplicacionSoloDeudas.getListaClientesSinAplicacionDeudasPrincipal().get(0).getLstDocumentosDeuda().size() > 0) {
					aobjL_listaDocDeudaPrincipal = objL_respuestaConsultaCuentasAplicacionSoloDeudas.getListaClientesSinAplicacionDeudasPrincipal().get(0).getLstDocumentosDeuda();
				}
			}

			// CREAMOS EL OBJETO CtaCteGCodCli PARA EL REPORTE       
			CtaCteGCodCli objL_rptaConsCtaSaplicacSoloDeudasReporte = new CtaCteGCodCli();
			objL_rptaConsCtaSaplicacSoloDeudasReporte.setLstDocumentosDeuda(aobjL_listaDocDeudaPrincipal);//*se le agrega List<CtaCteDocumentosDeuda> 
			objL_rptaConsCtaSaplicacSoloDeudasReporte.setLstNotaCredito(objL_respuestaConsultaCuentasAplicacionSoloDeudas.getListaClientesSinAplicacionDeudasNotaCredito());
			objL_rptaConsCtaSaplicacSoloDeudasReporte.setLstSaldoFavor(objL_respuestaConsultaCuentasAplicacionSoloDeudas.getListaClientesSinAplicacionDeudasSaldoFavor());
			objL_rptaConsCtaSaplicacSoloDeudasReporte.setLstSaldoPendientes(objL_respuestaConsultaCuentasAplicacionSoloDeudas.getListaClientesSinAplicacionDeudasSaldoPendiente());

			request.getSession(false).setAttribute("listaCuentasSaplicacionC",aObjL_listaDocCancelado);
			request.getSession(false).setAttribute("listaCuentasSaplicacionSoloDeudasPrincipal",aobjL_listaDocDeudaPrincipal);
			request.getSession(false).setAttribute("listaCuentasSaplicacionSoloDeudasNotaCredito",objL_respuestaConsultaCuentasAplicacionSoloDeudas.getListaClientesSinAplicacionDeudasNotaCredito());
			request.getSession(false).setAttribute("listaCuentasSaplicacionSoloDeudasSaldoFavor",objL_respuestaConsultaCuentasAplicacionSoloDeudas.getListaClientesSinAplicacionDeudasSaldoFavor());
			request.getSession(false).setAttribute("listaCuentasSaplicacionSoloDeudasSaldoPendiente",objL_respuestaConsultaCuentasAplicacionSoloDeudas.getListaClientesSinAplicacionDeudasSaldoPendiente());

			/*
			 * if(listaDocCancelado.size()==0){ CtaCteDocumentosDeuda temp = new
			 * CtaCteDocumentosDeuda(); temp.setDesAbv("&nbsp;");
			 * listaDocCancelado.add(temp); }
			 * if(listaDocDeudaPrincipal.size()==0){ CtaCteDocumentosDeuda temp
			 * = new CtaCteDocumentosDeuda(); temp.setDesAbv("&nbsp;");
			 * listaDocDeudaPrincipal.add(temp); }
			 * if(respuestaConsultaCuentasSaplicacionSoloDeudas
			 * .getListaClientesSinAplicacionDeudasNotaCredito().size()==0){
			 * CuentaClienteSaplicacionDeuNotaCre temp = new
			 * CuentaClienteSaplicacionDeuNotaCre();
			 * temp.setSerieManual("&nbsp;");
			 * respuestaConsultaCuentasSaplicacionSoloDeudas
			 * .getListaClientesSinAplicacionDeudasNotaCredito().add(temp); }
			 * if(respuestaConsultaCuentasSaplicacionSoloDeudas.
			 * getListaClientesSinAplicacionDeudasSaldoFavor().size()==0){
			 * CuentaClienteSaplicacionDeuSaldoFavor temp = new
			 * CuentaClienteSaplicacionDeuSaldoFavor();
			 * temp.setRvMeaning("&nbsp;");
			 * respuestaConsultaCuentasSaplicacionSoloDeudas
			 * .getListaClientesSinAplicacionDeudasSaldoFavor().add(temp); }
			 * if(respuestaConsultaCuentasSaplicacionSoloDeudas
			 * .getListaClientesSinAplicacionDeudasSaldoPendiente().size()==0){
			 * CuentaClienteSaplicacionDeuSaldoPendiente temp = new
			 * CuentaClienteSaplicacionDeuSaldoPendiente();
			 * temp.setRvMeaming("&nbsp;");
			 * respuestaConsultaCuentasSaplicacionSoloDeudas
			 * .getListaClientesSinAplicacionDeudasSaldoPendiente().add(temp); }
			 */

			ConsultaForm objL_consultForm = (ConsultaForm) form;

			DateFormat objL_dateFormat = new SimpleDateFormat("dd/MM/yyyy");
			Date objL_fechaInicio = objL_parametrosConsultaCuentaCorriente.getObjPb_fechaInicio();
			Date objL_fechaFin = objL_parametrosConsultaCuentaCorriente.getObjPb_fechaFin();
			
			objL_consultForm.setStrPb_fechaInicio(objL_fechaInicio == null ? "" : objL_dateFormat.format(objL_fechaInicio));
			objL_consultForm.setStrPb_fechaFin(objL_fechaFin == null ? "" : objL_dateFormat.format(objL_fechaFin));

			// Carga del ReportBean para la creacion del reporte:
			RBCuentaCorriente.reset();
			RBCuentaCorriente.setStaLstDocumentosClientes(aobjL_respuestaDocumentosClientes);
			RBCuentaCorriente.setStaLstNotasCredito(aobjL_respuestaNotasCredito);
			RBCuentaCorriente.setStaLstSaldosFavor(aobjL_respuestaSaldosFavor);
			RBCuentaCorriente.setStaLstSaldosPendientes(aobjL_respuestaSaldosPendientes);
			RBCuentaCorriente.setStaLstCtaCteCliente(aobjL_respuestaConsultaCuentasAplicacion);

			String strL_estado = objL_parametrosConsultaCuentaClienteAplicacion.getStrPb_estado();
			String strL_aplicacion = objL_parametrosConsultaCuentaClienteAplicacion.getStrPb_aplicacion();
			if (strL_aplicacion.equalsIgnoreCase("CA")) {
				// CON APLICACION
				if (!(strL_estado.equalsIgnoreCase("CA"))) {
					// TODOS Y DEUDAS
					RBCuentaCorriente.newStaLstCtaCteGCodCli();
					RBCuentaCorriente.addStaLstCtaCteGCodCli(objL_rptaConsCtaSaplicacSoloDeudasReporte);
				}
			}

			// MODIFICAR seteamos el tipo de cambio, debemos modificar al pasar a produccion
			Double dblL_cambio = 3.21;//new Double(request.getSession(false).getAttribute("tipoCambio").toString());
			RBCuentaCorriente.setStaFltTipoCambio(dblL_cambio);
			// ParametrosConsultaCuentaClienteSaplicacion
			String strL_codigo = objL_parametrosConsultaCuentaCorriente.getStrPb_codigoCliente();
			ClienteBean objL_clienteBean = new ClienteBean();
			ClienteService objL_clienteService = new ClienteService();
			objL_clienteBean = objL_clienteService.obtenCliente(strL_codigo);
			/*
			 * objCliente.setCodigo(codigo); objCliente.setNombre((String)
			 * request.getSession().getAttribute("nombreCliente"));
			 * objCliente.setRuc((String)
			 * request.getSession().getAttribute("rucCliente"));
			 */

			// capturamos le estado de la cuenta y lo enviamos a la pagina para
			// q parezca seleccionado
			request.setAttribute("aplicacion", strL_aplicacion);

			RBCuentaCorriente.setStaObjCliente(objL_clienteBean);
			RBCuentaCorriente.setStaFechaInicio(objL_parametrosConsultaCuentaClienteAplicacion.getObjPb_fechaInicio());
			RBCuentaCorriente.setStaFechaFin(objL_parametrosConsultaCuentaClienteAplicacion.getObjPb_fechaFin());
			RBCuentaCorriente.setStaStrAplicacion(objL_parametrosConsultaCuentaClienteAplicacion.getStrPb_aplicacion());
			RBCuentaCorriente.setStaStrEstado(objL_parametrosConsultaCuentaClienteAplicacion.getStrPb_estado());

			// cargamos el nombre del cliente
			ClienteService objL_clienteServices = new ClienteService();
			ClienteBean objL_clienteBeans = null;
			objL_clienteBeans = objL_clienteServices.obtenCliente(strL_codigo);
			String strL_nombreCliente = (objL_clienteBeans == null) ? "No se encuentra el cliente": objL_clienteBeans.getStrPb_nombre();
			objL_consultForm.setStrPb_nombreCliente(strL_nombreCliente);

			if (request.getParameter("flgExportar") != null) {
				return mapping.findForward("ConsultaCuentasCorrientesExportar");
			} else {
				return mapping.findForward("ConsultaCuentasCorrientes");
			}

		} catch (Exception e) {
			e.printStackTrace();
			request.setAttribute("detalleError","ConsultaAction-consultaCuentasCorrientesProcess: "+ e.getMessage());
			// System.out.println("ConsultaAction-consultaCuentasCorrientesProcess: "+e.getMessage());
			Logging.log(this.getClass(), e.getMessage(), e);
			return mapping.findForward("error");
		}
	}

	public ActionForward exportarCuentasCorrientesProcess(
			ActionMapping mapping, ActionForm form, HttpServletRequest request,
			HttpServletResponse response) throws IOException, ServletException {
		try {

			String strL_rutaJasper = "";
			String strL_estado = RBCuentaCorriente.getStaStrEstado();
			String strL_aplicacion = RBCuentaCorriente.getStaStrAplicacion();

			if (strL_aplicacion != null && !(strL_aplicacion.equalsIgnoreCase("CA"))) {
				// SIN APLICACION
				if (strL_estado != null && !(strL_estado.equalsIgnoreCase("B"))) {
					// TODOS Y DEUDAS
					strL_rutaJasper = "jreport/ReporteCuentaCorriente.jasper";
				} else {
					// CANCELADOS
					strL_rutaJasper = "jreport/ReporteCuentaCorriente_C.jasper";
				}
			} else {
				// CON APLICACION
				if (strL_estado != null && !(strL_estado.equalsIgnoreCase("B"))) {
					// TODOS Y DEUDAS
					strL_rutaJasper = "jreport/ReporteCuentaCorriente_D.jasper";
				} else {
					// CANCELADOS
					strL_rutaJasper = "jreport/ReporteCuentaCorriente_E.jasper";
				}
			}
			
						
			//OpcionesApService objL_service= new OpcionesApService();
			//Antes de llamar al reporte, se inserta data en el log de opciones
			//objL_service.registrarOpcionesAp( request.getRemoteUser(), "ReporteCuentaCorriente.jasper","SICCOSAP", "INI");
			

			File objL_jasperFile = new File(getServlet().getServletContext().getRealPath("/")+ strL_rutaJasper);
			if (!objL_jasperFile.exists())
				throw new JRRuntimeException("No se encontro el archivo '"+ strL_rutaJasper + "'");

			JasperReport objL_jasperReport = (JasperReport) JRLoader.loadObject(objL_jasperFile.getPath());

			Map<String, Object> aobjL_parameters = new HashMap<String, Object>();
			aobjL_parameters.put("SUBREPORT_DIR", (getServlet().getServletContext().getRealPath("/") + "jreport/"));
			aobjL_parameters.put("IMAGE_DIR", (getServlet().getServletContext().getRealPath("/") + "images/"));

			ServletOutputStream objL_ouputStream = response.getOutputStream();
			JRBeanCollectionDataSource objL_jrBeanCollectionDataSource= new JRBeanCollectionDataSource(DSCuentaCorriente.getCuentaCorrienteBeanCollection());
			//en esta parte se cae para generar los reportes
		
			JasperPrint	objL_jasperPrint = JasperFillManager.fillReport(objL_jasperReport, aobjL_parameters,objL_jrBeanCollectionDataSource );
	     

			JRPdfExporter objL_exporter = new JRPdfExporter();

			objL_exporter.setParameter(JRExporterParameter.JASPER_PRINT, objL_jasperPrint);
			objL_exporter.setParameter(JRExporterParameter.OUTPUT_STREAM,objL_ouputStream);
			response.setContentType("application/pdf");

			response.setHeader("Content-Disposition", "attachment; filename=" + "REPORTE_CuentasCorrientes.pdf");

			objL_exporter.exportReport();

			objL_ouputStream.flush();
			objL_ouputStream.close();

			return null; // NO LLEVA FORWARD, EL FLUSH DEVUELVE
		} catch (JRException e) {
			e.printStackTrace();
			request.setAttribute("detalleErrorJasperReport",
					"ConsultaAction-exportarCuentasCorrientesProcess: "
					+ e.getMessage());
			
			Logging.log(this.getClass(), e.getMessage(), e);
			return null;
		} catch (Exception e) {
			e.printStackTrace();
			request.setAttribute("detalleError",
					"ConsultaAction-exportarCuentasCorrientesProcess: "
					+ e.getMessage());
			
			Logging.log(this.getClass(), e.getMessage(), e);
			return null;
		}
	}

	private List<NotaCredito> solicitaRespuestaNotasCredito(
			ParametrosConsultaCuentaCorriente objA_parametros) 
	throws Exception {
		
		List<NotaCredito> aobjL_listaNotasCredito = new ArrayList<NotaCredito>();
		NotaCreditoService objL_notaCreditoService = new NotaCreditoService();
		aobjL_listaNotasCredito = objL_notaCreditoService.consultarNotasCreditoOmitirDocumentosAplicados(objA_parametros);
		return aobjL_listaNotasCredito;
	}

	private List<SaldoBean> solicitaRespuestaConsultaSaldosPendientes(
			ParametrosConsultaCuentaCorriente objA_parametros) 
	throws Exception {
		List<SaldoBean> aobjL_listaSaldos = new ArrayList<SaldoBean>();
		SaldoService objL_saldoService = new SaldoService();
		aobjL_listaSaldos = objL_saldoService.consultarSaldosPendientes(objA_parametros);
		return aobjL_listaSaldos;
	}

	private List<SaldoBean> solicitaRespuestaConsultaSaldosFavor(
			ParametrosConsultaCuentaCorriente objA_parametros) 
	throws Exception {
		List<SaldoBean> aobjL_listaSaldos = new ArrayList<SaldoBean>();
		SaldoService objL_saldoService = new SaldoService();
		aobjL_listaSaldos = objL_saldoService.consultarSaldosFavor(objA_parametros);
		return aobjL_listaSaldos;
	}

	private ParametrosConsultaCuentaCorriente extraeParametrosConsultaCuentasCorrientes(
			ActionForm objA_actionForm) 
	throws Exception {
		ParametrosConsultaCuentaCorriente objL_parametros = new ParametrosConsultaCuentaCorriente();

		extraeParametrosConsulta(objA_actionForm, objL_parametros);  //setea codigo fec_fin.fec_ini

		ConsultaForm objL_consultForm = (ConsultaForm) objA_actionForm;
		objL_parametros.setStrPb_estado(objL_consultForm.getStrPb_estadoElementosCuenta());
		objL_parametros.setStrPb_aplicacion(objL_consultForm.getStrPb_aplicacionCuentasCorrientes());

		return objL_parametros;
	}

	private ParametrosConsultaCuentaClienteSaplicacion extraeParametrosConsultaCuentasCorrientesSaplicacion(
			ActionForm objA_actionForm) throws Exception {
		ParametrosConsultaCuentaClienteSaplicacion objL_parametros = new ParametrosConsultaCuentaClienteSaplicacion();

		ConsultaForm objL_consultForm = (ConsultaForm) objA_actionForm;
		objL_parametros.setStrPb_estado(objL_consultForm.getStrPb_estadoElementosCuenta());
		objL_parametros.setStrPb_codigoCliente(objL_consultForm.getStrPb_codigoCliente());
		
		DateFormat objL_dateFormat = new SimpleDateFormat("dd/MM/yyyy");
		String strL_fechaInicioLiteral = objL_consultForm.getStrPb_fechaInicio();
		String strL_fechaFinLiteral = objL_consultForm.getStrPb_fechaFin();
		Date objL_fechaInicio = ((strL_fechaInicioLiteral == null) || strL_fechaInicioLiteral.equals("")) ? null : objL_dateFormat.parse(strL_fechaInicioLiteral);
		Date objL_fechaFin = ((strL_fechaFinLiteral == null) || strL_fechaFinLiteral.equals("")) ? null : objL_dateFormat.parse(strL_fechaFinLiteral);
		objL_parametros.setObjPb_fechaFin(objL_fechaFin);
		objL_parametros.setObjPb_fechaInicio(objL_fechaInicio);
		objL_parametros.setStrPb_aplicacion(objL_consultForm.getStrPb_aplicacionCuentasCorrientes());
		return objL_parametros;
	}

	private List<CuentaCorriente> solicitaRespuestaConsultaDocumentosClientes(
			ParametrosConsultaCuentaCorriente objA_parametros) 
	throws Exception {
		List<CuentaCorriente> aobjL_ListaCuentasCorrientes = new ArrayList<CuentaCorriente>();
		CuentaCorrienteService objL_cuentaCorrienteService = new CuentaCorrienteService();
		aobjL_ListaCuentasCorrientes = objL_cuentaCorrienteService.consultarDocumentosClientes(objA_parametros);
		return aobjL_ListaCuentasCorrientes;
	}

	private List<CtaCteCliente> solicitaRespuestaCuentaClienteSaplicacionCanceladas(
			ParametrosConsultaCuentaClienteSaplicacion objA_parametros)
			throws Exception {
		List<CtaCteCliente> aobjL_listaCuentasClienteSaplicacion = new ArrayList<CtaCteCliente>();
		CuentaClienteAplicacionService objL_cuentaClienteAplicacionService = new CuentaClienteAplicacionService();
		aobjL_listaCuentasClienteSaplicacion = objL_cuentaClienteAplicacionService.consultarCuentaClienteSAplicacionCanceladas(objA_parametros);
		return aobjL_listaCuentasClienteSaplicacion;
	}

	private CuentaClienteSaplicacionSoloDeudas solicitaRespuestaCuentaClienteSaplicacionSoloDeudas(
			ParametrosConsultaCuentaClienteSaplicacion objA_parametros)
	throws Exception {
		CuentaClienteSaplicacionSoloDeudas objL_cuentasClienteSaplicacionSoloDeudas = new CuentaClienteSaplicacionSoloDeudas();
		CuentaClienteAplicacionService objL_cuentaClienteAplicacionService = new CuentaClienteAplicacionService();
		objL_cuentasClienteSaplicacionSoloDeudas = objL_cuentaClienteAplicacionService.consultarCuentaClienteSAplicacionSoloDeudas(objA_parametros);
		return objL_cuentasClienteSaplicacionSoloDeudas;
	}

	public ActionForward consultaDepositosBancariosHome(ActionMapping mapping,
			ActionForm objA_actionForm, HttpServletRequest request,
			HttpServletResponse response) 
	throws IOException, ServletException {
		try {

			ConsultaForm objL_consultaForm = (ConsultaForm) objA_actionForm;
			
			objL_consultaForm.setStrPb_codigoCliente("");
			objL_consultaForm.setStrPb_nombreCliente("");
			objL_consultaForm.setStrPb_fechaInicio("");
			objL_consultaForm.setStrPb_fechaFin("");

			cargaCodigoClienteEnFormulario(request, objL_consultaForm);

			AuxiliarService objL_servicio = new AuxiliarService();

			List<ValorCombo> aobjL_listaEjercicio = objL_servicio.obtenerValoresEjercicio();
			List<ValorCombo> aobjL_listaPeriodo = objL_servicio.obtenerValoresPeriodo();

			objL_consultaForm.setListaEjercicio(aobjL_listaEjercicio);
			objL_consultaForm.setListaPeriodo(aobjL_listaPeriodo);
			objL_consultaForm.setStrPb_tipoDeposito("DB");

			request.getSession(false).setAttribute("listaDepositosBancarios", null);
			request.getSession(false).setAttribute("listaSaldosPendientes",null);
			request.getSession(false).setAttribute("listaPagosEfectivo", null);

			//SETEA AL CLIENTE
			String strL_tipoUsuario = (String) request.getSession(false).getAttribute("tipoUser");
			String strL_codigo = (String) request.getSession(false).getAttribute("codigoUser");
			if (strL_tipoUsuario.equals("CLIENTE")) {
				ClienteService objL_clienteService = new ClienteService();
				ClienteBean objL_cliente = null;
				objL_cliente = objL_clienteService.obtenCliente(strL_codigo);
				String nombreCliente = (objL_cliente == null) ? 
						"No se encuentra el cliente": objL_cliente.getStrPb_nombre();
				objL_consultaForm.setStrPb_codigoCliente(strL_codigo);
				objL_consultaForm.setStrPb_nombreCliente(nombreCliente);
			}

			return mapping.findForward("ConsultaDepositosBancarios");
		} catch (Exception e) {
			e.printStackTrace();
			request.setAttribute("detalleError",
					"ConsultaAction-consultaDepositosBancariosHome: "
					+ e.getMessage());
			
			Logging.log(this.getClass(), e.getMessage(), e);
			return mapping.findForward("error");
		}
	}
	
	public ActionForward consultaDepositosBancariosProcess(
			ActionMapping mapping, ActionForm objA_form, HttpServletRequest request,
			HttpServletResponse response) throws IOException, ServletException {
		try {

			ParametrosDeposito objL_parametros = this.extraeParametrosDeposito(objA_form,null);

			List<DepositoBancario> aobjL_respuestaConsultaDepositos = new ArrayList<DepositoBancario>();
			DepositoBancarioService objL_depositoBancarioService = new DepositoBancarioService();
			aobjL_respuestaConsultaDepositos = objL_depositoBancarioService.consultarDepositosBancarios(objL_parametros);
			List<SaldoBean> aobjL_respuestaConsultaDepositosSaldos = new ArrayList<SaldoBean>();
			aobjL_respuestaConsultaDepositosSaldos = objL_depositoBancarioService.obtenerSaldosPendientes();
			List<PagoEfectivo> aobjL_respuestaConsultaPagosEfectivo = new ArrayList<PagoEfectivo>();
			PagoEfectivoService objL_pagoEfectivoService = new PagoEfectivoService();
			aobjL_respuestaConsultaPagosEfectivo = objL_pagoEfectivoService.consultarPagosEfectivo(objL_parametros);

			request.getSession(false).setAttribute("listaDepositosBancarios",aobjL_respuestaConsultaDepositos);
			request.getSession(false).setAttribute("listaSaldosPendientes",aobjL_respuestaConsultaDepositosSaldos);
			request.getSession(false).setAttribute("listaPagosEfectivo",aobjL_respuestaConsultaPagosEfectivo);
            if(aobjL_respuestaConsultaPagosEfectivo==null){
            	
            	System.out.println("la lista de pagos es nula");
            }
            
            else{
            
            	
            }
			// Carga del ReportBean para la creacion del reporte:
			RBDepositoBancario.reset();
			RBDepositoBancario.setStaListaDepositosBancarios(aobjL_respuestaConsultaDepositos);
			RBDepositoBancario.setStaListaSaldosPendientes(aobjL_respuestaConsultaDepositosSaldos);
			RBDepositoBancario.setStaListaPagosEfectivo(aobjL_respuestaConsultaPagosEfectivo);
			String strL_codigo = objL_parametros.getStrPb_codigoCliente();
			ClienteBean objL_cliente = new ClienteBean();
			ClienteService objL_clienteService = new ClienteService();
			objL_cliente = objL_clienteService.obtenCliente(strL_codigo);
			/*
			 * objCliente.setCodigo(codigo); objCliente.setNombre((String)
			 * request.getSession().getAttribute("nombreCliente"));
			 * objCliente.setRuc((String)
			 * request.getSession().getAttribute("rucCliente"));
			 */

			RBDepositoBancario.setStaObjCliente(objL_cliente);
			RBDepositoBancario.setStaFechaInicio(objL_parametros.getObjPb_fechaInicio());
			RBDepositoBancario.setStaFechaFin(objL_parametros.getObjPb_fechaFin());
			RBDepositoBancario.setStaStrEjercicio(objL_parametros.getStrPb_ejercicio());
			RBDepositoBancario.setStaStrPeriodo(objL_parametros.getStrPb_periodo());
			RBDepositoBancario.setStaStrTipo(objL_parametros.getStrPb_tipo());

			// cargamos el nombre del cliente despues de la busqueda
			ConsultaForm objL_consultaForm = (ConsultaForm) objA_form;
			ClienteService objL_clienteServicio = new ClienteService();
			ClienteBean objL_clientes = null;
			objL_clientes = objL_clienteServicio.obtenCliente(strL_codigo);
			String nombreCliente = (objL_clientes == null) ? 
					"No se encuentra el cliente": objL_clientes.getStrPb_nombre();
			objL_consultaForm.setStrPb_nombreCliente(nombreCliente);

			if (request.getParameter("flgExportar") != null) {
				return mapping.findForward("ConsultaDepositosBancariosExportar");
			} else {
				return mapping.findForward("ConsultaDepositosBancarios");
			}															

		} catch (Exception e) {
			e.printStackTrace();
			request.setAttribute("detalleError",
					"ConsultaAction-consultaDepositosBancariosProcess: "
					+ e.getMessage());
			
			Logging.log(this.getClass(), e.getMessage(), e);
			return mapping.findForward("error");
		}
	}

	private ParametrosDeposito extraeParametrosDeposito(ActionForm objA_actionForm,
			Object object) 
	throws Exception {
		ConsultaForm objL_consultForm = (ConsultaForm) objA_actionForm;
		ParametrosDeposito objL_parametros = new ParametrosDeposito();
		extraeParametrosConsulta(objA_actionForm, objL_parametros);
		objL_parametros.setStrPb_ejercicio(objL_consultForm.getStrPb_ejercicioSeleccionado());
		objL_parametros.setStrPb_periodo(objL_consultForm.getStrPb_periodoSeleccionado());
		objL_parametros.setStrPb_tipo(objL_consultForm.getStrPb_tipoDeposito());

		return objL_parametros;
	}

	public ActionForward exportarDepositosBancariosProcess(
			ActionMapping mapping, ActionForm objA_actionForm, HttpServletRequest request,
			HttpServletResponse response) 
	throws IOException, ServletException {
		try {
			ConsultaForm objL_consultForm = (ConsultaForm) objA_actionForm;
			String strL_tipo = objL_consultForm.getStrPb_tipoDeposito();

			String strL_rutaJasper = "";
			if (strL_tipo.equals("DB")) {
				strL_rutaJasper = "jreport/ReporteDepositoBancario.jasper";
			} else {
				if (strL_tipo.equals("DE"))
					strL_rutaJasper = "jreport/ReportePagosEfectivoXCliente.jasper";
			}
			
			OpcionesApService objL_service= new OpcionesApService();
			// Antes de llamar al reporte, se inserta data en el log de opciones
			//objL_service.registrarOpcionesAp( request.getRemoteUser(), "ReporteDepositoBancario.jasper","SICCOSAP", "INI");
			
			File objL_jasperFile = new File(getServlet().getServletContext().getRealPath("/")+ strL_rutaJasper);
			if (!objL_jasperFile.exists())
				throw new JRRuntimeException("No se encontro el archivo '"+ strL_rutaJasper + "'");

			JasperReport objL_jasperReport = (JasperReport) JRLoader.loadObject(objL_jasperFile.getPath());

			Map<String, Object> aobjL_parameters = new HashMap<String, Object>();
			aobjL_parameters.put("SUBREPORT_DIR", (getServlet().getServletContext().getRealPath("/") + "jreport/"));
			aobjL_parameters.put("IMAGE_DIR", (getServlet().getServletContext().getRealPath("/") + "images/"));

			ServletOutputStream objL_ouputStream = response.getOutputStream();

			JasperPrint objL_jasperPrint = JasperFillManager.fillReport(objL_jasperReport, aobjL_parameters, 
					new JRBeanCollectionDataSource(DSDepositoBancario.getDepositoBancarioBeanCollection()));

			JRPdfExporter objL_exporter = new JRPdfExporter();

			objL_exporter.setParameter(JRExporterParameter.JASPER_PRINT, objL_jasperPrint);
			objL_exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, objL_ouputStream);
			response.setContentType("application/pdf");

			if (strL_tipo.equals("DB")) {
				response.setHeader("Content-Disposition",
						"attachment; filename="	+ "REPORTE_DepositosBancarios.pdf");
			} else {
				if (strL_tipo.equals("DE"))
					response.setHeader("Content-Disposition",
							"attachment; filename="	+ "REPORTE_PagosEfectivoXCliente.pdf");
			}

			objL_exporter.exportReport();

			objL_ouputStream.flush();
			objL_ouputStream.close();

			return null; // NO LLEVA FORWARD, EL FLUSH DEVUELVE
		} catch (JRException e) {
			e.printStackTrace();
			request.setAttribute("detalleErrorJasperReport",
					"ConsultaAction-exportarDepositosBancariosProcess: "
					+ e.getMessage());
			
			Logging.log(this.getClass(), e.getMessage(), e);
			return mapping.findForward("error");
		} catch (Exception e) {
			e.printStackTrace();
			request.setAttribute("detalleError",
					"ConsultaAction-exportarDepositosBancariosProcess: "
					+ e.getMessage());
			
			Logging.log(this.getClass(), e.getMessage(), e);
			return mapping.findForward("error");
		}
	}

	public ActionForward IniciarBuscarCliente(ActionMapping mapping,
			ActionForm objA_actionForm, HttpServletRequest request,
			HttpServletResponse response) {

		ConsultaForm objL_consultForm = (ConsultaForm) objA_actionForm;

		objL_consultForm.setStrPb_razonSocial("");
		objL_consultForm.setStrPb_ruc("");
	
		request.setAttribute("listaClientes", null);

		return mapping.findForward("ClienteHome");
	}

	public ActionForward IniciarBuscarCliente2(ActionMapping mapping,
			ActionForm objA_actionForm, HttpServletRequest request,
			HttpServletResponse response) {

		ConsultaForm objL_consultForm = (ConsultaForm) objA_actionForm;

		objL_consultForm.setStrPb_razonSocial("");
		objL_consultForm.setStrPb_ruc("");

		request.setAttribute("listaClientes", null);
		return mapping.findForward("ClienteHome2");
	}

	public ActionForward IniciarBuscarCliente3(ActionMapping mapping,
			ActionForm objA_actionForm, HttpServletRequest request,
			HttpServletResponse response) {

		ConsultaForm objL_consultForm = (ConsultaForm) objA_actionForm;

		objL_consultForm.setStrPb_razonSocial("");
		objL_consultForm.setStrPb_ruc("");

		request.setAttribute("listaClientes", null);
		return mapping.findForward("ClienteHome3");
	}

	public ActionForward IniciarBuscarCliente4(ActionMapping mapping,
			ActionForm objA_actionForm, HttpServletRequest request,
			HttpServletResponse response) {

		ConsultaForm objL_consultForm = (ConsultaForm) objA_actionForm;

		objL_consultForm.setStrPb_razonSocial("");
		objL_consultForm.setStrPb_ruc("");

		request.setAttribute("listaClientes", null);
		return mapping.findForward("ClienteHome4");
	}

	public ActionForward IniciarBuscarCliente5(ActionMapping mapping,
			ActionForm objA_actionForm, HttpServletRequest request,
			HttpServletResponse response) {

		ConsultaForm objL_consultForm = (ConsultaForm) objA_actionForm;

		objL_consultForm.setStrPb_razonSocial("");
		objL_consultForm.setStrPb_ruc("");

		request.setAttribute("listaClientes", null);
		return mapping.findForward("ClienteHome5");
	}

	public ActionForward IniciarBuscarCliente6(ActionMapping mapping,
			ActionForm objA_actionForm, HttpServletRequest request,
			HttpServletResponse response) {

		ConsultaForm objL_consultForm = (ConsultaForm) objA_actionForm;

		objL_consultForm.setStrPb_razonSocial("");
		objL_consultForm.setStrPb_ruc("");

		request.setAttribute("listaClientes", null);
		return mapping.findForward("ClienteHome6");
	}

	public ActionForward IniciarBuscarCliente7(ActionMapping mapping,
			ActionForm objA_actionForm, HttpServletRequest request,
			HttpServletResponse response) {

		ConsultaForm objL_consultForm = (ConsultaForm) objA_actionForm;

		objL_consultForm.setStrPb_razonSocial("");
		objL_consultForm.setStrPb_ruc("");

		request.setAttribute("listaClientes", null);
		return mapping.findForward("ClienteHome7");
	}

	public ActionForward IniciarBuscarCliente8(ActionMapping mapping,
			ActionForm objA_actionForm, HttpServletRequest request,
			HttpServletResponse response) {

		ConsultaForm objL_consultForm = (ConsultaForm) objA_actionForm;

		objL_consultForm.setStrPb_razonSocial("");
		objL_consultForm.setStrPb_ruc("");

		request.setAttribute("listaClientes", null);
		return mapping.findForward("ClienteHome8");
	}
	
	public ActionForward IniciarBuscarCliente9(ActionMapping mapping,
			ActionForm objA_actionForm, HttpServletRequest request,
			HttpServletResponse response) {

		ConsultaForm objL_consultForm = (ConsultaForm) objA_actionForm;

		objL_consultForm.setStrPb_razonSocial("");
		objL_consultForm.setStrPb_ruc("");

		request.setAttribute("listaClientes", null);
		return mapping.findForward("ClienteHome9");
	}
	
	public ActionForward IniciarBuscarCliente10(ActionMapping mapping,
			ActionForm objA_actionForm, HttpServletRequest request,
			HttpServletResponse response) {

		ConsultaForm objL_consultForm = (ConsultaForm) objA_actionForm;

		objL_consultForm.setStrPb_razonSocial("");
		objL_consultForm.setStrPb_ruc("");

		request.setAttribute("listaClientes", null);
		return mapping.findForward("ClienteHome10");
	}
	
	 /** 
     * @metodo iniciarBuscarCliente11	PESIMA PROGRAMACION LBERNAOL
     * @descripcion muestra la pagina de busqueda de clientes para el usuario CAASA
     * @fecha 13/10/2011
     * @responsable tgestiona
     * @descripcionCambio
     */
	public ActionForward iniciarBuscarCliente11(ActionMapping mapping,
			ActionForm objA_actionForm, HttpServletRequest request,
			HttpServletResponse response) {

			ConsultaForm objL_consultForm = (ConsultaForm) objA_actionForm;
			objL_consultForm.setStrPb_razonSocial("");
			objL_consultForm.setStrPb_ruc("");
			request.setAttribute("listaClientes", null);
			return mapping.findForward("pgntBusquedaDeCliente");
			
	}

	public ActionForward ConsultaClienteProcess(ActionMapping mapping,
			ActionForm objA_actionForm, HttpServletRequest request,
			HttpServletResponse response) {

		ConsultaForm objL_consultForm = (ConsultaForm) objA_actionForm;

		String strL_numero = request.getParameter("numPop");
		try {

			ClienteBean objL_cliente = new ClienteBean();
			objL_cliente.setStrPb_nombre(objL_consultForm.getStrPb_razonSocial());
			objL_cliente.setStrPb_ruc(objL_consultForm.getStrPb_ruc().trim());

			List<ClienteBean> aobjL_listaClientes = solicitarRespuestaClientes(objL_cliente);

			request.setAttribute("listaClientes", aobjL_listaClientes);

			if (strL_numero.equalsIgnoreCase("1")) {

				return mapping.findForward("ClienteHome");
			}

			if (strL_numero.equalsIgnoreCase("2")) {

				return mapping.findForward("ClienteHome2");
			}

			if (strL_numero.equalsIgnoreCase("3")) {

				return mapping.findForward("ClienteHome3");
			}

			if (strL_numero.equalsIgnoreCase("4")) {

				return mapping.findForward("ClienteHome4");
			}

			if (strL_numero.equalsIgnoreCase("5")) {

				return mapping.findForward("ClienteHome5");
			}

			if (strL_numero.equalsIgnoreCase("6")) {

				return mapping.findForward("ClienteHome6");
			}

			if (strL_numero.equalsIgnoreCase("7")) {

				return mapping.findForward("ClienteHome7");
			}

			if (strL_numero.equalsIgnoreCase("8")) {

				return mapping.findForward("ClienteHome8");
			}
			
			if (strL_numero.equalsIgnoreCase("9")) {

				return mapping.findForward("ClienteHome9");
			}
			
			if (strL_numero.equalsIgnoreCase("10")) {

				return mapping.findForward("ClienteHome10");
			}
			if (strL_numero.equalsIgnoreCase("11")) {

				return mapping.findForward("pgntBusquedaDeCliente");
			}

		} catch (Exception e) {
			e.printStackTrace();
			Logging.log(this.getClass(), e.getMessage(), e);
			return mapping.findForward("error");
		}

		return null;

	}

	public ActionForward consultaDocumentosObraHome(ActionMapping mapping,
			ActionForm objA_actionForm, HttpServletRequest request,
			HttpServletResponse response) {

		try {

			ConsultaForm objL_consultForm = (ConsultaForm) objA_actionForm;

			objL_consultForm.setStrPb_codigoCliente("");
			objL_consultForm.setStrPb_nombreCliente("");

			objL_consultForm.setStrPb_numeroObra("");
			objL_consultForm.setStrPb_obraSeleccionada("");
			objL_consultForm.setStrPb_fechaInicio("");
			objL_consultForm.setStrPb_fechaFin("");
			objL_consultForm.setStrPb_nroObra("");

			objL_consultForm.setListaObras(new ArrayList<ValorCombo>());

			cargaCodigoClienteEnFormulario(request, objL_consultForm);

			request.getSession(false).setAttribute("listaDocumentosClientes", null);
			request.getSession(false).setAttribute("listaNotasCredito", null);

			// seteamos el codigo del cliente en caso sea CLIENTE
			String strL_tipoUsuario = (String) request.getSession(false).getAttribute("tipoUser");
			String strL_codigo = (String) request.getSession(false).getAttribute("codigoUser");
			if (strL_tipoUsuario.equals("CLIENTE")) {
				ClienteService objL_clienteService = new ClienteService();
				ClienteBean objL_cliente = null;
				objL_cliente = objL_clienteService.obtenCliente(strL_codigo);
				String nombreCliente = (objL_cliente == null) ? 
						"No se encuentra el cliente": objL_cliente.getStrPb_nombre();
				objL_consultForm.setStrPb_codigoCliente(strL_codigo);
				objL_consultForm.setStrPb_nombreCliente(nombreCliente);
			}

			return mapping.findForward("DocumentosObraHome");

		} catch (Exception e) {
			e.printStackTrace();
			request.setAttribute("detalleError",
					"ConsultaAction-consultaDocumentosObraHome: "
					+ e.getMessage());
			
			Logging.log(this.getClass(), e.getMessage(), e);
			return mapping.findForward("error");

		}

	}

	public ActionForward consultaDocumentosObraProcess(ActionMapping mapping,
			ActionForm objA_actionForm, HttpServletRequest request,
			HttpServletResponse response) {

		try {
			ConsultaForm objL_consultForm = (ConsultaForm) objA_actionForm;

			request.getSession(false).setAttribute("listaDocumentosClientes", null);
			request.getSession(false).setAttribute("listaNotasCredito", null);

			objL_consultForm.setListaObras(new ArrayList<ValorCombo>());

			ParametrosConsultaObra objL_parametros = extraeParametrosConsultaObra(objA_actionForm, null);

			// cargamos el combo de obras para el cliente
			AuxiliarService objL_auxiliarService = new AuxiliarService();
			ParametrosGenerales objL_parametrosGen = new ParametrosGenerales();
			objL_parametrosGen.setStrPb_codigoCliente(objL_parametros.getStrPb_codigoCliente());
			List<ValorCombo> aobjL_listaObrasCmb = new ArrayList<ValorCombo>();
			aobjL_listaObrasCmb.addAll(objL_auxiliarService.obtenerValoresObrasCliente(objL_parametrosGen));
			request.getSession(false).setAttribute("obras", aobjL_listaObrasCmb);

			// ParametrosConsultaCuentaClienteSaplicacion
			String strL_codigo = objL_parametros.getStrPb_codigoCliente();
			ClienteBean objL_cliente = new ClienteBean();
			ClienteService objL_ClienteService = new ClienteService();
			objL_cliente = objL_ClienteService.obtenCliente(strL_codigo);

			RBDocumentoObra.reset();

			DSDocumentoObra.newLstRbDocuObra();

			if (objL_parametros.getStrPb_numeroObra().equalsIgnoreCase("TODAS")) {

				List<ObraBean> aobjL_listaReporte = new ArrayList<ObraBean>();
				ObraService objL_service = new ObraService();
				aobjL_listaReporte = objL_service.consultarObrasTodas(objL_parametros);

				Double dblL_cambio = new Double(request.getSession(false).getAttribute("tipoCambio").toString());
				RBDocumentoObra.setStafltTipoCambio(dblL_cambio);

				List<DocumentosObra> aobjL_listaDocuObras = new ArrayList<DocumentosObra>();

				for (ObraBean obraBean : aobjL_listaReporte) {
					
					objL_parametros.setStrPb_numeroObra(obraBean.getStrPb_numObra());
					ArrayList<CuentaCorriente> aobjL_respuestaDocumentosClientes = (ArrayList<CuentaCorriente>) solicitaRespuestaConsultaDocumentosClientesObra(objL_parametros);

					ArrayList<CuentaCorriente> aobjL_listaDocClientes = solicitarFacturasObra(aobjL_respuestaDocumentosClientes);
					ArrayList<ObraNotaCredito> aobjL_listaNotasCredito = solicitarNotasCredito(aobjL_respuestaDocumentosClientes);

					ArrayList<CuentaCorriente> aobjL_listDocsFinal = new ArrayList<CuentaCorriente>();
					ArrayList<ObraNotaCredito> aobjL_listaNcFinal = new ArrayList<ObraNotaCredito>();

					for (int i = 0; i < aobjL_listaDocClientes.size(); i++) {

						CuentaCorriente objL_ctaCorriente = new CuentaCorriente();
						objL_ctaCorriente = solicitarRespuestaCuenta(aobjL_listaDocClientes.get(i));

						aobjL_listDocsFinal.add(objL_ctaCorriente);

					}

					for (int j = 0; j < aobjL_listaNotasCredito.size(); j++) {

						ObraNotaCredito objL_notasCredito = new ObraNotaCredito();
						objL_notasCredito = solicitarRespuestaNc(aobjL_listaNotasCredito.get(j));

						aobjL_listaNcFinal.add(objL_notasCredito);
					}

					DocumentosObra objL_docObra = new DocumentosObra();
					
					objL_docObra.setStrPv_numeroObra(obraBean.getStrPb_numObra());
					objL_docObra.setStrPv_descripcionObra("OBRA " + obraBean.getStrPb_numObra() + " - " + obraBean.getStrPb_descObra());
					objL_docObra.setLstdocuClientes(aobjL_listDocsFinal);
					objL_docObra.setLstNotasCredito(aobjL_listaNcFinal);
					if (aobjL_listaNcFinal.size() != 0) {
						request.setAttribute("ncVacio", "NO");
					}

					aobjL_listaDocuObras.add(objL_docObra);

					// Carga del ReportBean para la creacion del reporte:

					RBDocumentoObra objL_documentoObra = new RBDocumentoObra();
					objL_documentoObra.setLstdocuClientes(aobjL_listDocsFinal);
					//System.out.println(lstncFinal.size());
					objL_documentoObra.setLstNotasCredito(aobjL_listaNcFinal);
					// objdocObra.setObjCliente(objCliente);

					objL_documentoObra.setCodCli(objL_cliente.getStrPb_codigo());
					objL_documentoObra.setRazonSocial(objL_cliente.getStrPb_nombre());
					objL_documentoObra.setRuc(objL_cliente.getStrPb_ruc());
					objL_documentoObra.setFechaInicio(objL_parametros.getObjPb_fechaInicio());
					objL_documentoObra.setFechaFin(objL_parametros.getObjPb_fechaFin());
					objL_documentoObra.setNumeroObra(obraBean.getStrPb_numObra());
					objL_documentoObra.setDescripcionObra(obraBean.getStrPb_descObra());

					DSDocumentoObra.addLstRBDocuObra(objL_documentoObra);

				}

				request.getSession(false).setAttribute(
						"listaDocumentosClientes", aobjL_listaDocuObras);
				// objL_consultForm.setLstdocuobras(lstdocuobras);//tiene datos no?
			
			}

			else {

				ArrayList<CuentaCorriente> aobjL_listaDocsFinal = new ArrayList<CuentaCorriente>();
				ArrayList<ObraNotaCredito> aobjL_listaNcFinal = new ArrayList<ObraNotaCredito>();

				objL_parametros.setStrPb_numeroObra(objL_consultForm.getStrPb_nroObra());

				ArrayList<CuentaCorriente> aobjL_respuestaDocumentosClientes = (ArrayList<CuentaCorriente>) solicitaRespuestaConsultaDocumentosClientesObra(objL_parametros);

				ArrayList<CuentaCorriente> aobjL_listaDocClientes = solicitarFacturasObra(aobjL_respuestaDocumentosClientes);
				ArrayList<ObraNotaCredito> aobjL_listaNotasCredito = solicitarNotasCredito(aobjL_respuestaDocumentosClientes);

				for (int i = 0; i < aobjL_listaDocClientes.size(); i++) {

					CuentaCorriente objL_ctaCorriente = new CuentaCorriente();
					objL_ctaCorriente = solicitarRespuestaCuenta(aobjL_listaDocClientes.get(i));

					aobjL_listaDocsFinal.add(objL_ctaCorriente);

				}

				for (int j = 0; j < aobjL_listaNotasCredito.size(); j++) {

					ObraNotaCredito objL_notaCredito = new ObraNotaCredito();
					objL_notaCredito = solicitarRespuestaNc(aobjL_listaNotasCredito.get(j));
														
					aobjL_listaNcFinal.add(objL_notaCredito);
					
				}

				List<DocumentosObra> aobjL_listaDocumentoObras = new ArrayList<DocumentosObra>();

				DocumentosObra objL_documentoObra = new DocumentosObra();
				objL_documentoObra.setStrPv_numeroObra(objL_consultForm.getStrPb_nroObra());
				objL_documentoObra.setStrPv_descripcionObra("OBRA "+ objL_consultForm.getStrPb_nombreObra());
				objL_documentoObra.setLstdocuClientes(aobjL_listaDocsFinal);
				
				if (aobjL_listaNcFinal.size() != 0) {
					objL_documentoObra.setLstNotasCredito(aobjL_listaNcFinal);
					request.setAttribute("ncVacio", "NO");
				}

				aobjL_listaDocumentoObras.add(objL_documentoObra);

				// Carga del ReportBean para la creacion del reporte:

				RBDocumentoObra objL_docObra = new RBDocumentoObra();
				objL_docObra.setLstdocuClientes(aobjL_listaDocsFinal);
				objL_docObra.setLstNotasCredito(aobjL_listaNcFinal);
				// objdocObra.setObjCliente(objCliente);

				objL_docObra.setCodCli(objL_cliente.getStrPb_codigo());
				objL_docObra.setRazonSocial(objL_cliente.getStrPb_nombre());
				objL_docObra.setRuc(objL_cliente.getStrPb_ruc());
				objL_docObra.setFechaInicio(objL_parametros.getObjPb_fechaInicio());
				objL_docObra.setFechaFin(objL_parametros.getObjPb_fechaFin());
				objL_docObra.setNumeroObra(objL_consultForm.getStrPb_nroObra());
				objL_docObra.setDescripcionObra(objL_consultForm.getStrPb_nombreObra());

				DSDocumentoObra.addLstRBDocuObra(objL_docObra);

				request.getSession(false).setAttribute("listaDocumentosClientes", aobjL_listaDocumentoObras);

			}

			objL_consultForm.setStrPb_nombreCliente(objL_cliente.getStrPb_nombre());

			if (request.getParameter("flgExportar") != null) {
				return mapping.findForward("ConsultaDocumentoObraExportar");
			} else {

				return mapping.findForward("DocumentosObraHome");
			}

		} catch (Exception e) {
			e.printStackTrace();
			Logging.log(this.getClass(), e.getMessage(), e);
			return mapping.findForward("error");
		}

	}

	private ObraNotaCredito solicitarRespuestaNc(ObraNotaCredito objA_notaCredito)
	throws Exception {
		CuentaCorrienteService objL_cuentaCorrienteService = new CuentaCorrienteService();
		return objL_cuentaCorrienteService.solicitarNotaCredito(objA_notaCredito);
	}

	private CuentaCorriente solicitarRespuestaCuenta(
			CuentaCorriente objA_cuentaCorriente) 
	throws Exception {
		CuentaCorrienteService objL_cuentaCorrienteService = new CuentaCorrienteService();
		return objL_cuentaCorrienteService.solicitarDocumentoObraSelecta(objA_cuentaCorriente);
	}

	private ArrayList<ObraNotaCredito> solicitarNotasCredito(
			ArrayList<CuentaCorriente> aobjA_respuestaDocumentosClientes)
	throws Exception {

		ArrayList<ObraNotaCredito> aobjL_listaNotaCredito = new ArrayList<ObraNotaCredito>();

		for (CuentaCorriente objL_cuentaCorriente : aobjA_respuestaDocumentosClientes) {

			if (objL_cuentaCorriente.getStrPb_tipoDocumento().equalsIgnoreCase("FC")) {

				ObraNotaCredito objL_nc = new ObraNotaCredito();
				objL_nc.setStrPb_ser_doc(objL_cuentaCorriente.getStrPb_serie());
				objL_nc.setStrPb_num_doc(objL_cuentaCorriente.getStrPb_numero());
				objL_nc.setStrPb_tipoDoc("FC");
				objL_nc.setStrPb_empresa(objL_cuentaCorriente.getStrPb_empresa());
				objL_nc.setStrPb_distribuidora(objL_cuentaCorriente.getStrPb_distribuidora());

				aobjL_listaNotaCredito.add(objL_nc);

			}

		}

		return aobjL_listaNotaCredito;
	}

	private ArrayList<CuentaCorriente> solicitarFacturasObra(
			ArrayList<CuentaCorriente> aobjA_respuestaDocumentosClientes)
	throws Exception {
		ArrayList<CuentaCorriente> aobjL_listaCuentasCorrientes = new ArrayList<CuentaCorriente>();

		for (CuentaCorriente objA_cuentaCorriente : aobjA_respuestaDocumentosClientes) {

			if (objA_cuentaCorriente.getStrPb_tipoDocumento().equalsIgnoreCase("FA")
				|| (objA_cuentaCorriente.getStrPb_tipoDocumento().equalsIgnoreCase("FB"))) {

				aobjL_listaCuentasCorrientes.add(objA_cuentaCorriente);
			}
		}
		return aobjL_listaCuentasCorrientes;
	}

	private ArrayList<CuentaCorriente> respuestaDocumentosObra(
			ParametrosConsultaObra objA_parametros) 
	throws Exception {
		List<CuentaCorriente> aobjL_listaCuentasCorrientes = new ArrayList<CuentaCorriente>();
		CuentaCorrienteService objL_cuentaCorrienteService = new CuentaCorrienteService();
		aobjL_listaCuentasCorrientes = objL_cuentaCorrienteService.consultarDocumentosClientesObra(objA_parametros);
		return (ArrayList<CuentaCorriente>) aobjL_listaCuentasCorrientes;

	}

	private List<CuentaCorriente> solicitaRespuestaConsultaDocumentosClientesObra(
			ParametrosConsultaObra objA_parametros) 
	throws Exception {
		List<CuentaCorriente> aobjL_listaCuentasCorrientes = new ArrayList<CuentaCorriente>();
		CuentaCorrienteService objL_cuentaCorrienteService = new CuentaCorrienteService();
		aobjL_listaCuentasCorrientes = objL_cuentaCorrienteService.consultarDocumentosClientesObra(objA_parametros);
		return aobjL_listaCuentasCorrientes;
	}

	private List<ClienteBean> solicitarRespuestaClientes(ClienteBean objLCliente)
	throws Exception {

		List<ClienteBean> aobjL_listaClientes = new ArrayList<ClienteBean>();
		ConsultaClienteService objL_service = new ConsultaClienteService();
		aobjL_listaClientes = objL_service.consultarClientes(objLCliente);

		return aobjL_listaClientes;
	}

	public ActionForward mostrarArchivo(ActionMapping mapping, ActionForm objA_actionForm,
			HttpServletRequest request, HttpServletResponse response) {

		FTPUtils objL_ftp = new FTPUtils();
		ServletOutputStream objL_stream = null;
		BufferedInputStream objL_buff = null;
		boolean blnL_band = true;

		String strL_valor = request.getParameter("valor1");
		String strA_CodCliente = request.getParameter("valor2");
		String strL_valor2 = "";

		String strA_NroSerie = strL_valor.substring(0, strL_valor.indexOf("-"));

		String strA_NroDocumento = strL_valor.substring(strL_valor.indexOf("-") + 1, strL_valor.length());

		String strL_TipoDocumento = request.getParameter("valor3");

		String strA_CodigoTipoDocumento = "";

		if (strL_TipoDocumento.startsWith("00")) {
			strA_CodigoTipoDocumento = strL_TipoDocumento;

		}

		else {
			if (strL_TipoDocumento.equalsIgnoreCase("FV")) {
				strA_CodigoTipoDocumento = "001";

			}
			if (strL_TipoDocumento.equalsIgnoreCase("BV")) {
				strA_CodigoTipoDocumento = "002";
			}
		}

		try {
			DocumentosLocator objL_locator = new DocumentosLocator();
			DocumentosPortType objL_service = objL_locator.getDocumentosHttpSoap11Endpoint();
			com.caasa.docus.to.xsd.DocumentoBeanWs[] aobjL_lista = objL_service.getListaDocumentos(strA_NroSerie, strA_NroDocumento,strA_CodigoTipoDocumento, strA_CodCliente);

			if (aobjL_lista == null || aobjL_lista.length == 0) {
				blnL_band = false;
			} else {
				com.caasa.docus.to.xsd.DocumentoBeanWs objL_documento = aobjL_lista[0];
				strL_valor2 = objL_documento.getStrPv_nombreArchivo();
			}
		} catch (ServiceException e) {
			// System.out.println("Error : "+e.toString());

		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			// System.out.println("Error : "+e.toString());
		}

		objL_ftp.abrirConexion();

		UtilPersistencia objL_uper = new UtilPersistencia();
		String strL_nombreDirectorio = objL_uper.getNombreDirectorio(strL_valor2);
		String strL_nombreArchivo = objL_uper.getNombreArchivo(strL_valor2);

		InputStream objL_inputDocument = objL_ftp.download(strL_nombreDirectorio,strL_nombreArchivo);

		// System.out.println("El documento existe");

		try {
			if (objL_inputDocument == null) {
				blnL_band = false;
				// System.out.println("El documento no existe en el servidor");
				// redireccionar
			} else {
				// System.out.println("El documento existe en el servidor");

				objL_stream = response.getOutputStream();

				// set response headers
				String strL_contentType = objL_uper.getContentTypeFromFileName(strL_valor2);
				response.setContentType(strL_contentType);

				response.addHeader("Content-Disposition","attachment; filename=" + strL_nombreArchivo);

				objL_buff = new BufferedInputStream(objL_inputDocument);

				int intL_readBytes = 0;

				// read from the file; write to the ServletOutputStream

				while (objL_buff != null && (intL_readBytes = objL_buff.read()) != -1) {
					objL_stream.write(intL_readBytes);
				}
			}

		} catch (IOException e2) {
			// TODO Auto-generated catch block
			e2.printStackTrace();
		} finally {

			if (objL_stream != null)
				try {
					objL_stream.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					blnL_band = false;
					e.printStackTrace();
				}
			if (objL_buff != null)
				try {
					objL_buff.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					blnL_band = false;
					e.printStackTrace();
				}

				objL_ftp.cerrarConexion();
		}

		if (blnL_band) {
			return null;
		} else {
			return mapping.findForward("ConsultaCuentasCorrientes");
		}

	}

	public ActionForward consultaPedidoHome(ActionMapping mapping,
			ActionForm objA_actionForm, HttpServletRequest request,
			HttpServletResponse response) 
	throws Exception {

		ConsultaForm objL_consultForm = (ConsultaForm) objA_actionForm;

		request.getSession(false).setAttribute("estadoPedido", null);
		return mapping.findForward("PedidoHome");
	}

	public ActionForward refrescar(ActionMapping mapping, ActionForm objA_actionForm,
			HttpServletRequest request, HttpServletResponse response)
	throws Exception {

		ConsultaForm objL_consultForm = (ConsultaForm) objA_actionForm;

		String strL_codCli = request.getParameter("codigoCliente");
		String strL_razSoc = request.getParameter("razSoc");

		objL_consultForm.setStrPb_codigoCliente(strL_codCli);
		objL_consultForm.setStrPb_nombreCliente(strL_razSoc);

		return mapping.findForward("ConsultaCuentasCorrientes");
	}
	
	public ActionForward refrescar2(ActionMapping mapping, ActionForm objA_actionForm,
			HttpServletRequest request, HttpServletResponse response)
	throws Exception {

		ConsultaForm objL_consultForm = (ConsultaForm) objA_actionForm;

		String strL_codCli = request.getParameter("codigoCliente");
		String strL_razSoc = request.getParameter("razSoc");

		objL_consultForm.setStrPb_codigoCliente(strL_codCli);
		objL_consultForm.setStrPb_nombreCliente(strL_razSoc);

		return mapping.findForward("ConsultaGarantias");
	}

	public ActionForward refrescarGarantia(ActionMapping mapping,
			ActionForm objA_actionForm, HttpServletRequest request,
			HttpServletResponse response) 
	throws Exception {

		ConsultaForm objL_consultForm = (ConsultaForm) objA_actionForm;

		String strL_codCli = request.getParameter("codigoCliente");
		String strL_razSoc = request.getParameter("razSoc");

		objL_consultForm.setStrPb_codigoCliente(strL_codCli);
		objL_consultForm.setStrPb_nombreCliente(strL_razSoc);

		return mapping.findForward("ConsultaGarantias");
	}

	public ActionForward refrescar3(ActionMapping mapping, ActionForm objL_actionForm,
			HttpServletRequest request, HttpServletResponse response)
	throws Exception {

		ConsultaForm objL_consultForm = (ConsultaForm) objL_actionForm;

		String strL_codCli = request.getParameter("codigoCliente");
		String strL_razSoc = request.getParameter("razSoc");

		objL_consultForm.setStrPb_codigoCliente(strL_codCli);
		objL_consultForm.setStrPb_nombreCliente(strL_razSoc);

		return mapping.findForward("ConsultaDeudasVencidas");
	}

	public ActionForward refrescar4(ActionMapping mapping, ActionForm objA_actionForm,
			HttpServletRequest request, HttpServletResponse response)
	throws Exception {

		ConsultaForm objL_consultForm = (ConsultaForm) objA_actionForm;

		String strL_codCli = request.getParameter("codigoCliente");
		String strL_razSoc = request.getParameter("razSoc");

		objL_consultForm.setStrPb_codigoCliente(strL_codCli);
		objL_consultForm.setStrPb_nombreCliente(strL_razSoc);

		return mapping.findForward("ConsultaDepositosBancarios");
	}

	public ActionForward refrescar5(ActionMapping mapping, ActionForm objA_actionForm,
			HttpServletRequest request, HttpServletResponse response)
	throws Exception {

		ConsultaForm objL_consultForm = (ConsultaForm) objA_actionForm;

		String strL_codCli = request.getParameter("codigoCliente");
		String strL_razSoc = request.getParameter("razSoc");

		objL_consultForm.setStrPb_codigoCliente(strL_codCli);
		objL_consultForm.setStrPb_nombreCliente(strL_razSoc);

		return mapping.findForward("ConsultaNotasCredito");
	}

	public ActionForward refrescar6(ActionMapping mapping, ActionForm objA_actionForm,
			HttpServletRequest request, HttpServletResponse response)
	throws Exception {

		ConsultaForm objL_consultForm = (ConsultaForm) objA_actionForm;

		String strL_codCli = request.getParameter("codigoCliente");
		String strL_razSoc = request.getParameter("razSoc");

		AuxiliarService objL_auxiliarService = new AuxiliarService();

		ParametrosGenerales objL_parametros = new ParametrosGenerales();
		objL_parametros.setStrPb_codigoCliente(strL_codCli);

		List<ValorCombo> aobjL_listaObras = new ArrayList<ValorCombo>();

		ValorCombo objL_obraVacio = new ValorCombo();
		objL_obraVacio.setStrPb_codigo("");
		objL_obraVacio.setStrPb_valor("--Debe Seleccionar una Obra--");
		aobjL_listaObras.add(objL_obraVacio);

		aobjL_listaObras.addAll(objL_auxiliarService.obtenerValoresObrasCliente(objL_parametros));
		// String nombreCliente =
		// clienteService.obtenNombreCliente(codigoCliente);

		// opciones =
		// "<option value=\"Todas\">Todas las obras</option>";
		// /opciones =
		// "<option value=\"\">--Debe Seleccionar Cliente--</option>";
		// opciones = "";

		ValorCombo objL_todasObras = new ValorCombo();
		objL_todasObras.setStrPb_codigo("Todas");
		objL_todasObras.setStrPb_valor("Todas las obras");
		aobjL_listaObras.add(objL_todasObras);

		objL_consultForm.setListaObras(aobjL_listaObras);

		objL_consultForm.setStrPb_codigoCliente(strL_codCli);
		objL_consultForm.setStrPb_nombreCliente(strL_razSoc);

		return mapping.findForward("ConsultaCuentasObra");
	}

	public ActionForward refrescar8(ActionMapping mapping, ActionForm objA_actionForm,
			HttpServletRequest request, HttpServletResponse response)
	throws Exception {

		ConsultaForm objL_consultForm = (ConsultaForm) objA_actionForm;

		String strL_codCli = request.getParameter("codigoCliente");
		String strL_razSoc = request.getParameter("razSoc");

		AuxiliarService objL_auxiliarService = new AuxiliarService();

		ParametrosGenerales objL_parametros = new ParametrosGenerales();
		objL_parametros.setStrPb_codigoCliente(strL_codCli);

		List<ValorCombo> aobjL_listaObras = new ArrayList<ValorCombo>();

		ValorCombo objL_obraVacio = new ValorCombo();
		objL_obraVacio.setStrPb_codigo("");
		objL_obraVacio.setStrPb_valor("--Debe Seleccionar una Obra--");
		aobjL_listaObras.add(objL_obraVacio);

		aobjL_listaObras.addAll(objL_auxiliarService.obtenerValoresObrasCliente(objL_parametros));
		// String nombreCliente =
		// clienteService.obtenNombreCliente(codigoCliente);

		// opciones =
		// "<option value=\"Todas\">Todas las obras</option>";
		// /opciones =
		// "<option value=\"\">--Debe Seleccionar Cliente--</option>";
		// opciones = "";

		ValorCombo objL_todasObras = new ValorCombo();
		objL_todasObras.setStrPb_codigo("Todas");
		objL_todasObras.setStrPb_valor("Todas las obras");
		aobjL_listaObras.add(objL_todasObras);

		objL_consultForm.setListaObras(aobjL_listaObras);

		objL_consultForm.setStrPb_codigoCliente(strL_codCli);
		objL_consultForm.setStrPb_nombreCliente(strL_razSoc);

		return mapping.findForward("DocumentosObraHome");
	}
	
	
	public ActionForward refrescar9(ActionMapping mapping, ActionForm objA_actionForm,
			HttpServletRequest request, HttpServletResponse response)
	throws Exception {

		ConsultaForm objL_consultForm = (ConsultaForm) objA_actionForm;

		String strL_codCli = request.getParameter("codigoCliente");
		String strL_razSoc = request.getParameter("razSoc");

		objL_consultForm.setStrPb_codigoCliente(strL_codCli);
		objL_consultForm.setStrPb_nombreCliente(strL_razSoc);

		return mapping.findForward("ConsultaReporteBloqueo");
	}

	public ActionForward IniciarBuscarObra(ActionMapping mapping,
			ActionForm objA_actionForm, HttpServletRequest request,
			HttpServletResponse response) 
	throws Exception {

		ConsultaForm objform = (ConsultaForm) objA_actionForm;

		String strL_codcli = "";

		strL_codcli = request.getParameter("codCli");

		objform.setStrPb_nroObra("");
		objform.setStrPb_nombreObra("");
		objform.setStrPb_codigoCliente("");

		if (strL_codcli != "") {
			objform.setStrPb_codigoCliente(strL_codcli);
		}

		return mapping.findForward("ConsultaObra");
	}

	public ActionForward BuscarObra(ActionMapping mapping, ActionForm objA_actionForm,
			HttpServletRequest request, HttpServletResponse response)
	throws Exception {

		ConsultaForm objL_consultaForm = (ConsultaForm) objA_actionForm;
		ObraService objL_obraService = new ObraService();
		ArrayList<ObraBean> aobjL_listatObras = null;

		try {

			aobjL_listatObras = objL_obraService.consultarObras(objL_consultaForm.getStrPb_codigoCliente(),
					objL_consultaForm.getStrPb_nroObra(), objL_consultaForm.getStrPb_nombreObra());
			request.setAttribute("listaObras", aobjL_listatObras);
		} catch (Exception e) {
			e.printStackTrace();
		}

		return mapping.findForward("ConsultaObra");

	}

	public ActionForward consultaReporteBloqueoObraHome(ActionMapping mapping,
			ActionForm objA_actionForm, HttpServletRequest request,
			HttpServletResponse response) {

		try {

			ConsultaForm objL_consultForm = (ConsultaForm) objA_actionForm;

			objL_consultForm.setStrPb_codigoCliente("");
			objL_consultForm.setStrPb_nombreCliente("");

			objL_consultForm.setStrPb_numeroObra("");
			objL_consultForm.setStrPb_obraSeleccionada("");
			objL_consultForm.setStrPb_fechaInicio("");
			objL_consultForm.setStrPb_fechaFin("");
			objL_consultForm.setStrPb_nroObra("");

			objL_consultForm.setListaObras(new ArrayList<ValorCombo>());

			cargaCodigoClienteEnFormulario(request, objL_consultForm);

			//SETEA EL CLIENTE
			String strL_tipoUsuario = (String) request.getSession(false).getAttribute("tipoUser");
			String strL_codigo = (String) request.getSession(false).getAttribute("codigoUser");
			if (strL_tipoUsuario.equals("CLIENTE")) {
				ClienteService objL_clienteService = new ClienteService();
				ClienteBean objL_cliente = null;
				objL_cliente = objL_clienteService.obtenCliente(strL_codigo);
				String strL_nombreCliente = (objL_cliente == null) ? 
						"No se encuentra el cliente": objL_cliente.getStrPb_nombre();
				objL_consultForm.setStrPb_codigoCliente(strL_codigo);
				objL_consultForm.setStrPb_nombreCliente(strL_nombreCliente);
			}

			return mapping.findForward("ConsultaReporteBloqueo");

		} catch (Exception e) {
			e.printStackTrace();
			request.setAttribute("detalleError",
					"ConsultaAction-consultaReporteObraHome: "
					+ e.getMessage());
		
			Logging.log(this.getClass(), e.getMessage(), e);
			return mapping.findForward("error");

		}

	}

	public ActionForward exportarReporteBloqueo(ActionMapping mapping,
			ActionForm objA_actionForm, HttpServletRequest request,
			HttpServletResponse response) {

		String strL_rutaJasper = "";

		try {

			ConsultaForm objL_consultForm = (ConsultaForm) objA_actionForm;

			ObraService objL_obraService = new ObraService();
			
			ArrayList<ObraBean> aobjL_listaBloqueoObra=new ArrayList<ObraBean>();

			ParametrosGenerales objL_parametros = new ParametrosGenerales();
			
			objL_parametros.setStrPb_codigoCliente(objL_consultForm.getStrPb_codigoCliente());
			DateFormat objL_dateFormat = new SimpleDateFormat("dd/MM/yyyy");

			String strL_fechaInicioLiteral = objL_consultForm.getStrPb_fechaInicio();
			String strL_fechaFinLiteral = objL_consultForm.getStrPb_fechaFin();
			Date objL_fechaInicio = ((strL_fechaInicioLiteral == null) || strL_fechaInicioLiteral.equals("")) ? 
					null : objL_dateFormat.parse(strL_fechaInicioLiteral);
			Date objL_fechaFin = ((strL_fechaFinLiteral == null) || strL_fechaFinLiteral.equals("")) ? 
					null : objL_dateFormat.parse(strL_fechaFinLiteral);
			objL_parametros.setObjPb_fechaInicio(objL_fechaInicio);
			objL_parametros.setObjPb_fechaFin(objL_fechaFin);
			
			if(!objL_consultForm.getStrPb_nroObra().equalsIgnoreCase("Todas")){
				objL_parametros.setStrPb_numero_obra(objL_consultForm.getStrPb_nroObra());
			}
			else{
				objL_parametros.setStrPb_numero_obra("%");
			}
			
			if(objL_consultForm.getStrPb_opcionReporte().equalsIgnoreCase("Todos")){					

				aobjL_listaBloqueoObra = objL_obraService.obtenerListaBloqueosObra(objL_parametros);
				strL_rutaJasper = "jreport/ReporteBloqDesbloqObra.jasper";
				
			}
			
			if(objL_consultForm.getStrPb_opcionReporte().equalsIgnoreCase("Bloqueo")){
				aobjL_listaBloqueoObra = objL_obraService.obtenerListaSoloBloqueosObra(objL_parametros);
				 strL_rutaJasper = "jreport/ReporteBloqueObra.jasper";
			}
			
			if(objL_consultForm.getStrPb_opcionReporte().equalsIgnoreCase("Desbloqueo")){
				aobjL_listaBloqueoObra = objL_obraService.obtenerListaSoloDesBloqueosObra(objL_parametros);
				strL_rutaJasper = "jreport/ReporteBloqueObra.jasper";
			}
			//Original INICIO
			
			OpcionesApService objL_service= new OpcionesApService();
			
			//DONDE REGISTRAMOS EL LOG
			//objL_service.registrarOpcionesAp( request.getRemoteUser(), "ReporteBloqueObra.jasper","SICCOSAP", "INI");
			
			DSObra.setLstReporteBloqueo(aobjL_listaBloqueoObra);
			
		
			File objL_jasperFile = new File(getServlet().getServletContext().getRealPath("/")+ strL_rutaJasper);

			if (!objL_jasperFile.exists())
				throw new JRRuntimeException("No se encontro el archivo '" + strL_rutaJasper + "'");

			JasperReport objL_jasperReport = (JasperReport) JRLoader.loadObject(objL_jasperFile.getPath());
			
			Map<String, Object> parameters = new HashMap<String, Object>();

			parameters.put("IMAGE_DIR", (getServlet().getServletContext().getRealPath("/") + "images/"));

			ServletOutputStream objL_ouputStream = response.getOutputStream();

			JRBeanCollectionDataSource objL_cds= new JRBeanCollectionDataSource(DSObra.getLstReporteBloqueo());
			
			
			JasperPrint objL_jasperPrint = JasperFillManager.fillReport(objL_jasperReport, parameters, objL_cds);
		 
			
			JRPdfExporter objL_exporter = new JRPdfExporter();

			objL_exporter.setParameter(JRExporterParameter.JASPER_PRINT, objL_jasperPrint);
			objL_exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, objL_ouputStream);
			response.setContentType("application/pdf");

			response.setHeader("Content-Disposition", "attachment; filename="
					+ "REPORTE_Bloqueos.pdf");

			objL_exporter.exportReport();

			objL_ouputStream.flush();
			objL_ouputStream.close();

			return null;

		} catch (Exception e) {
			e.printStackTrace();
			request.setAttribute("detalleError",
					"ConsultaAction-consultaReporteObraHome: "
					+ e.getMessage());
			
			Logging.log(this.getClass(), e.getMessage(), e);
			return null;
			
		}

	}

	//Certificados
	public ActionForward consultaCertificadosHome(ActionMapping mapping,
			ActionForm objA_actionForm, HttpServletRequest request,
			HttpServletResponse response) 
	throws IOException {

		ConsultaForm objL_consultForm = (ConsultaForm) objA_actionForm;

		objL_consultForm.setStrPb_nombreContacto("");
		objL_consultForm.setStrPb_telefono1("");
		objL_consultForm.setStrPb_telefono2("");
		objL_consultForm.setStrPb_correoContacto("");
		objL_consultForm.setStrPb_detalleSolicitud("");

		return mapping.findForward("CertificadoHome");

	}

	public ActionForward consultaCertificadosProcess(ActionMapping mapping,
			ActionForm objA_actionForm, HttpServletRequest request,
			HttpServletResponse response) 
	throws IOException{
				
		ConsultaForm objL_consultForm = (ConsultaForm) objA_actionForm;
		ActionMessages objL_messages = new ActionMessages();
		
		String strL_mail_to="";
		String strL_mail_subject="";
		String strL_mail_cc="";
		String strL_mail_body="";
				
		strL_mail_subject="Solicitud de "+ objL_consultForm.getStrPb_tipoCertificado();
				
		try {
			
			String strL_tipoUsuario = (String) request.getSession(false).getAttribute("tipoUser");
			String strL_codigo = (String) request.getSession(false).getAttribute("codigoUser");
				
		if (strL_tipoUsuario.equals("CLIENTE")) {
			ClienteService objL_clienteService = new ClienteService();
			ClienteBean objL_cliente = null;
			objL_cliente = objL_clienteService.obtenCliente(strL_codigo);
			String nombreCliente = (objL_cliente == null) ? 
				"No se encuentra el cliente": objL_cliente.getStrPb_nombre();		
			
			String strL_tipoCertificado=objL_consultForm.getStrPb_tipoCertificado();
			
			strL_mail_body="La empresa "+ nombreCliente+ " por medio de " + objL_consultForm.getStrPb_nombreContacto()+" ha solicitado un "+ strL_tipoCertificado;
			
			if(strL_tipoCertificado.equalsIgnoreCase("Certificado de Calidad")){
				strL_mail_to="jlompart@aasa.com.pe";
			}
			
			if(strL_tipoCertificado.equalsIgnoreCase("Certificado del Distribuidor")){
				strL_mail_to="llucioni@aasa.com.pe";
			}
			
			if(strL_tipoCertificado.equalsIgnoreCase("Prueba Analisis Ensayo")){
				strL_mail_to="jlompart@aasa.com.pe";
			}
			
			if(strL_tipoCertificado.equalsIgnoreCase("Ficha Tecnica de Producto")){
				strL_mail_to="jlompart@aasa.com.pe";
			}
			
			if(strL_tipoCertificado.equalsIgnoreCase("Certificado ISO")){
				strL_mail_to="llucioni@aasa.com.pe";
			}
			
			if(strL_tipoCertificado.equalsIgnoreCase("Certificado del Ambiente")){
				strL_mail_to="llucioni@aasa.com.pe";
			}
						
			String strL_detalleSolicitud=" ";
			
			strL_detalleSolicitud=" Detalle Solicitud: "+ objL_consultForm.getStrPb_detalleSolicitud();
			
			strL_mail_body= strL_mail_body+" "+ strL_detalleSolicitud;
			
			ConsultaClienteService objL_consultaClienteService = new ConsultaClienteService();
			
			objL_consultaClienteService.enviarCorreo(strL_mail_to, strL_mail_subject, strL_mail_cc, strL_mail_body);
			
			/*messages.add("correcto", new ActionMessage("envio.correcto"));	
			saveMessages(request, messages);*/
			
			request.setAttribute("strA_confirma", "ok");
			
			
		}
			
			
		} catch (Exception e) {
			e.printStackTrace();
			request.setAttribute("detalleError",
					"ConsultaAction-consultaCertificado: "
					+ e.getMessage());
			
			Logging.log(this.getClass(), e.getMessage(), e);
			return mapping.findForward("error");
		}
		
		
		
		return mapping.findForward("CertificadoHome");
		
	}

	public ActionForward consultaEstadoPedidoHome(ActionMapping mapping,
			ActionForm objA_actionForm, HttpServletRequest request,
			HttpServletResponse response) 
	throws IOException, ServletException {
		try {

			ConsultaForm objL_consultaForm = (ConsultaForm) objA_actionForm;

			objL_consultaForm.setStrPb_codigoCliente("");
			objL_consultaForm.setStrPb_nombreCliente("");
			objL_consultaForm.setStrPb_fechaInicio("");
			objL_consultaForm.setStrPb_fechaFin("");
			objL_consultaForm.setStrPb_ordenCompra("");

			cargaCodigoClienteEnFormulario(request, objL_consultaForm);

			request.getSession(false).setAttribute("listaDocumentosClientes",null);
			
			// seteamos el codigo del cliente en caso sea CLIENTE
			String strL_tipoUsuario = (String) request.getSession(false).getAttribute("tipoUser");
			String strL_codigo = (String) request.getSession(false).getAttribute("codigoUser");
			
			if (strL_tipoUsuario.equals("CLIENTE")) {
				ClienteService objL_clienteService = new ClienteService();
				ClienteBean objL_clienteBean = null;
				objL_clienteBean = objL_clienteService.obtenCliente(strL_codigo);
				
				String strL_nombreCliente = (objL_clienteBean == null) ? "No se encuentra el cliente": objL_clienteBean.getStrPb_nombre();
				objL_consultaForm.setStrPb_codigoCliente(strL_codigo);
				objL_consultaForm.setStrPb_nombreCliente(strL_nombreCliente);
			}

			return mapping.findForward("ConsultaEstadoPedido");
		} catch (Exception e) {
			e.printStackTrace();
			request.setAttribute("detalleError","ConsultaAction-consultaEstadoPedidoHome: "+ e.getMessage());
			
			Logging.log(this.getClass(), e.getMessage(), e);
			return mapping.findForward("error");
		}
	}
	
	public ActionForward consultaEstadoPedido(
			ActionMapping mapping, 
			ActionForm objA_actionForm, 
			HttpServletRequest request,
			HttpServletResponse response) 
	throws IOException, ServletException {
		try {
			
			ConsultaForm objL_consultForm = (ConsultaForm) objA_actionForm;
				
			ArrayList<PedidoBean> aobjL_listaPedidos = new ArrayList<PedidoBean>();
			
		
			ConsultaPedidoService objL_consultaPedidoService = new ConsultaPedidoService();
			
			aobjL_listaPedidos = objL_consultaPedidoService.obtenerEstadoPedidos(
					objL_consultForm.getStrPb_codigoCliente(), objL_consultForm.getStrPb_fechaInicio(),
					objL_consultForm.getStrPb_fechaFin(),objL_consultForm.getStrPb_ordenCompra());
			
			return mapping.findForward("ConsultaEstadoPedido");
			
			
			

		} catch (Exception e) {
			e.printStackTrace();
			request.setAttribute("detalleError","ConsultaAction-consultaEstadoPedidoProcess: "+ e.getMessage());
			// System.out.println("ConsultaAction-consultaCuentasCorrientesProcess: "+e.getMessage());
			Logging.log(this.getClass(), e.getMessage(), e);
			return mapping.findForward("error");
		}
	}

}
